非递归二叉树insert()方法不起作用

时间:2012-10-28 03:52:35

标签: c++ c data-structures binary-tree binary-search-tree

我编写了一个二进制树代码,用于在非递归方法中将元素插入其中。代码未按预期工作。无论我调试代码多少次,似乎都没有错,但我得到了错误的结果。我希望你们能帮忙。提前谢谢。

void insert(int element){
    if(root == NULL){
        struct elemq *node;
        node = (struct elemq *)malloc(sizeof(struct elemq));
        node->ele = element;
        node->left = NULL;
        node->right = NULL;
        root = node;
        cout << root->ele << "\n";
    }
    else{
        struct elemq *ref;
        ref = root;
        while(ref != NULL){
            if(element <= ref->ele){
                if(ref->left == NULL){
                    struct elemq *node;
                    node = (struct elemq *)malloc(sizeof(struct elemq ));
                    node->ele = element;
                    node->left = NULL;
                    node->right = NULL;
                    ref->left = node;
                    break;
                }
                else{
                    ref = ref->left;
                }
            }
            else if(element > ref->ele){
                if(ref->right == NULL){
                    struct elemq *node;
                    node = (struct elemq *)malloc(sizeof(struct elemq ));
                    node->ele = element;
                    node->left = NULL;
                    node->right = NULL;
                    ref->right = node;
                    break;
                }
                else{
                    ref = ref->right;
                }
            }
        }
    }
}

每当我尝试插入元素时,每个元素都被视为root,而不仅仅是第一次。因此,每次条件if(root == NULL)true。我将root声明为全局变量,并将其初始化为NULL中的main()。我通过将cout <<放在第一个if()条件下来了解这一点。我将之前的帖子修改为这个新问题。

2 个答案:

答案 0 :(得分:2)

node = ref->left;

你想要

ref->left = node;

和ref-&gt;类似

答案 1 :(得分:1)

我认为您错误地设置了要添加到引用的节点,而不是设置对要添加的节点的左右引用。 将node = ref->left更改为ref->left = node,同样将其更改为右侧。