二叉树中区间值的向量

Vector of values from the interval in binary tree

本文关键字:向量 区间 二叉树      更新时间:2023-10-16

我正在使用二叉树,我想要的是制作一个包含元素的向量,这些元素实际上是节点的值,这些节点是两个已经给定的节点之间的键。查看代码并尝试理解:

        vector<ValueType> MakeVector ( vector<ValueType> &v, Node* first, Node* last, Node* temp) const
{
    if( temp != 0 && temp->_key >= first->_key && temp->_key <= last->_key )
    {
        MakeVector(v, first, last, temp->_left);
        v.push_back(temp->_value);
        makeVector(v, first, last, temp->_right);
    }
}
vector<ValueType> from_to(KeyType a, KeyType b) const
{
    vector<ValueType> v;
    Node* c (FindMaxSmallerThan(b, _root));  //These functions are working fine
    if( c == 0 ) return v;
    Node* d (FindMinBiggerThan(a, _root));
    if( d == 0 ) return v;
    if(d->_key > c->_key) return v;
    MakeVector( v, d, c, c); /*Here is where my program crashes and it says that I   used  an ilegal pointer :/ */
    return v;
}

多亏了您的建议,我现在纠正了它。我认为这可能会起作用,但仍然不太确定。

     vector<ValueType> MakeVector ( vector<ValueType> &v, Node* node, Node* lower, Node* upper) const
{
    if( lower->_key == upper->_key )
    {
        v.push_back(lower->_value);
        return v;
    }
    if( node->_parent != 0 && maximum(node->_parent)->_key >= upper->_key)
    inorderVector (v,node->_parent, lower, upper);
    else if( node->_parent != 0)
    MakeVector(v, node->_parent, lower, upper);
    else MakeVector(v, node, lower, upper);
    return v;
}

InordeVector看起来像这样:

    void inorderVector (vector<ValueType> &v, Node* parent, Node* lower, Node* upper)     const
    {
      if( parent != 0 )
    {
    inorderVector(v, parent->_left, lower, upper);
    if( parent->_key >= lower->_key && parent->_key <= upper->_key )
    v.push_back(parent->_value);
    inorderVector(v, parent->_right, lower, upper);
    }
    return;
    }

我选择 Inorder,因为必须对向量进行排序。这样,所有键大于上限的节点都将被忽略。