我正在编写一个代码来查找二叉树的有序后继(不是二进制搜索树)。这只是一个练习题。更喜欢刷树概念。
我正在进行有序遍历并跟踪前一个节点。每当前一个节点变得等于我们正在搜索其后继节点的节点时,我就打印当前节点。
void inOrder(node* root , node* successorFor) {
static node* prev = null;
if(!root)
return;
inOrder(root->left,successorFor);
if(prev == successorFor )
print(root);
prev = root;
inOrder(root->right,successorFor);
}
我正在寻找一些我的解决方案可能会失败的测试用例?我的方法是否正确?如果不是,那该怎么办呢?
答案 0 :(得分:0)
该算法的基本逻辑是tree walk
。
您拨打了print(TREE-SUCCESSOR(root, k).key)
TREE-SUCCESSOR(root, k)
if root == NIL
return NIL
left = TREE-SUCCESSOR(root.left, k)
right = TREE-SUCCESSOR(root.right, k)
successor = NIL
if root.key > k
successor = root
if left
if k < left.key
if successor
if left.key < successor.key
successor = left
else
successor = left
if right
if k < right.key
if successor
if right.key < successor.key
successor = right
else
successor = right
return successor