2012-10-28 47 views
1

我写了一个二叉树代码,用于在非递归方法中插入元素。代码没有按预期工作。不管有多少次我调试代码,没有什么似乎是错的,但我得到错误的结果。我希望你们能帮忙。提前致谢。非递归二叉树插入()方法不起作用

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()的条件来了解这一点。我将之前的帖子修改为这个新问题。

+0

神圣的缩进! ;) – goji

+1

某处某处的代码是垃圾根。在整个地方插入'cout << root <<“\ n”;'看看它是否回到零。然后找到它发生的地方... – Yakk

+0

它是我的错误。抱歉。每次我插入一个元素时,我都会将根设为null。谢谢 –

回答

2
node = ref->left; 

你想

ref->left = node; 

并为参考 - 类似>右

+0

我做了改变。不过,每次我尝试插入一个元素时,每个元素都被视为根,而不仅仅是在第一次。所以,每次,条件if(root == NULL)是真的。我将root声明为全局变量,并在main()中将其初始化为NULL。 –

1

我认为你被错误设置要添加到引用的节点上,而不是设置左,对正在添加的节点的正确引用。 将node = ref->left更改为ref->left = node,同样对于右侧。