值的传染媒介从二进制树的间隔

时间:2014-01-10 03:36:02

标签: c++ binary-tree

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

        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;
}

1 个答案:

答案 0 :(得分:0)

由于你的建议,我现在已经纠正了。我认为这可能有用,但仍然不太确定。

     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,因为必须对矢量进行排序。这样,将忽略键大于我们上限的所有节点。