使用它们的inorder后继来填充BST的节点。(调试)

时间:2012-02-24 18:38:12

标签: c++ binary-tree

BST的每个节点都有一个额外的指针(Say succ)。我有以下函数来填充每个节点 - > succ用它的顺序继承。我只是访问每个节点(inoder序列)并分配inoder后继to node-> succ。它有什么问题?

void populateInorderSucc(node* root,node* tnode)
    {if(tnode==NULL)
        return;
    tnode->succ=inorderSucc(root,tnode);  //Seg-fault here
    populateInorderSucc(root,root->left);
    populateInorderSucc(root,root->right);
    }

我在main函数中将其称为populateInorderSucc(root,root); inorderSucc(root,tnode)函数工作正常。我已经从另一篇帖子find inorder successor in BST without using any extra space验证了它。由于递归调用而发生了seg-fault,如果我对它们进行评论,那么就没有错误

  node* inorderSucc(node* root,node* tnode)
     {   
       if(tnode->right!=NULL)
       return minvalue(tnode->right);
      else{   node* succ; 
             while(root!=NULL)
             {if(root->val>tnode->val)
                  {succ=root;
                  root=root->left;
                }
              else
               { if(root->val<tnode->val)
                root=root->right;

                else
                break;   
               }                
             }
        return succ; 
        }
    }

0 个答案:

没有答案