二叉树的有序继承者

时间:2012-09-17 16:07:05

标签: data-structures language-agnostic tree binary-tree

我正在编写一个代码来查找二叉树的有序后继(不是二进制搜索树)。这只是一个练习题。更喜欢刷树概念。

我正在进行有序遍历并跟踪前一个节点。每当前一个节点变得等于我们正在搜索其后继节点的节点时,我就打印当前节点。

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);
}

我正在寻找一些我的解决方案可能会失败的测试用例?我的方法是否正确?如果不是,那该怎么办呢?

1 个答案:

答案 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