完整二叉树中的每个节点都可以通过其标签进行标识。换句话说,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;
}
答案 0 :(得分:0)
我认为您的代码无法处理以下情况:
1
/ \
2 38
\
5
您可以直接针对此问题应用BFS。
答案 1 :(得分:0)
你不应该检查你的root是否为null ptr。可能存在级别不是1的情况,但是您将null ptr传递给方法。例如,如果在递归期间,当右子项为空时。