BST - 插入+ C ++

时间:2013-11-14 03:37:14

标签: c++ recursion binary-search-tree

我正在尝试使用二叉搜索树数据结构,但我似乎无法在树中插入任何内容。每次我的程序调用insert函数时,它都认为树中没有任何内容。以下是两个班级:

template<typename T>
class TreeNode{
public:
    T m_data;
    TreeNode* m_right;
    TreeNode* m_left;
    TreeNode<T>(const T& data, TreeNode<T>* right, TreeNode<T>* left) : m_data(data), m_right(right), m_left(left){};
};

template<typename T>
class MyBSTree : public AbstractBSTree<T>{
protected:
    TreeNode<T>* m_root;
    int m_size;

这是功能:

    void rec_insert(TreeNode<T>* root, const T& x){
        if(root == NULL){
            cout << "Inserting here" << endl;
            TreeNode<T>* tmp = new TreeNode<T>(x, NULL, NULL);
            root = tmp;
        }
        else if(x < root -> m_data){
            cout << "Inserting left" << endl;
            rec_insert(root -> m_left, x);  
        }
        else if(x > root -> m_data){
            cout << "Inserting right" << endl;
            rec_insert(root -> m_right, x);
        }
        if(root == NULL)
            cout << "WHAT IS HAPPENING?" << endl;
        cout << "resizing" << endl;
        m_size++;
    };

插入几个项目的输出是:

Inserting here
resizing
Inserting here
resizing

我真的不知道这里发生了什么,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您需要对传递引用和传递值进行一些研究。

您将指针传递给insert方法 - 您只能在本地更改root的值 - 您所做的任何更改都不会超出函数调用范围。您需要通过引用传递以允许更改root,并在rec_insert()方法之外查看更改。

另一种方法可能是重构代码以从rec_insert()返回根值。