从完整二叉树中删除最后一个节点

时间:2015-03-06 05:31:03

标签: c recursion data-structures tree binary-tree

完整二叉树中的每个节点都可以通过其标签进行标识。换句话说,CBT的级别顺序遍历意味着以标签的升序访问节点。我写了一个函数getPointer来返回给定Root和Label的节点。例如,在下面显示的完整二叉树中,键5 具有标签4 ,键38具有标签3,依此类推。

     1 
   /   \
  2     38
 /
5 

我在以下方法中出错? 我有节点结构。

node 
{
  rightChild
  leftChild
  value
  label
}

C风格的伪代码:

     getPointer(root, label)
     if(label == 1) return root
     else
     {
        temp_node = getPointer(root,label/2);
        child     = temp_node->left;
        if(label == child->label) return child;
        else                      return temp_node->right;
     }

2 个答案:

答案 0 :(得分:0)

我认为您的代码无法处理以下情况:

     1
    / \
   2   38
        \
         5

您可以直接针对此问题应用BFS。

答案 1 :(得分:0)

你不应该检查你的root是否为null ptr。可能存在级别不是1的情况,但是您将null ptr传递给方法。例如,如果在递归期间,当右子项为空时。

相关问题