【问题标题】:non recursive binary tree insert() method not working非递归二叉树插入()方法不起作用
【发布时间】:2012-10-28 03:52:35
【问题描述】:

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

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 声明为全局变量,并在main() 中将其初始化为NULL。我通过将cout &lt;&lt; 放在第一个if() 条件中来了解这一点。我将之前的帖子修改为这个新问题。

【问题讨论】:

  • 某处的某些代码正在破坏根目录。在整个地方插入cout &lt;&lt; root &lt;&lt; "\n";,看看它是否变回零。然后找到它发生的地方......
  • 这是我的错误。对不起。每次我插入一个元素时,我都会在 main 中将 root 设为 null。谢谢

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


【解决方案1】:
node = ref->left;

你想要

ref->left = node;

和类似的 ref->right

【讨论】:

  • 我做出了改变。尽管如此,每次我尝试插入一个元素时,每个元素都被视为根,而不仅仅是第一次。所以,每次,条件 if(root == NULL) 都是真的。我将 root 声明为全局变量,并在 main() 中将其初始化为 NULL。
【解决方案2】:

我认为您错误地设置了要添加到引用的节点,而不是设置了对要添加的节点的左右引用。 将node = ref-&gt;left 更改为ref-&gt;left = node,右边也一样。

【讨论】:

    猜你喜欢
    • 2012-11-16
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2014-12-03
    • 1970-01-01
    相关资源
    最近更新 更多