如何使此方法在BST中寻找继任者有效?

时间:2020-05-12 11:53:10

标签: java binary-tree binary-search-tree

我用Java为BST中给定节点的后继对象编写了一个方法,但是它不起作用

public Node successor(Node selectedNode) {
    Node current = root;
    while (current.element != selectedNode.element) {
        if (selectedNode.element > current.element) {
            current = current.right;
        } else {
            current = current.left;
        }
    }

    if (current.right != null) {
        return min(current.right);
    } else if (current == max(root)) {
        return new Node(Integer.MAX_VALUE);
    } else {
        Node tmp = current;
        if (current.element < root.element) {
            current = root;
            while (current.left.element > tmp.element) {
                current = current.left;
            }
        } else {
            current = root;
            while (current.right.element < tmp.element) {
                current = current.left;
            }
        }

        return current;
    }
}

还有Node类:

public class Node {
public int element;
public Node left;
public Node right;

public Node(int element) {
    this.element = element;
    this.left = null;
    this.right = null;
}

}

我的第一个想法是在检查current.right != null之后在else if块上写这样的东西:

Node p = t.parent
while(p != null and t == p:right)
    t = p
    p = p:parent
return p

但是不起作用。

1 个答案:

答案 0 :(得分:1)

有两种情况:

  1. 如果该节点有一个右子代,则其后继者是右子代的最左后代;如果子代本身没有左后代,则其子代本身;
  2. 否则,节点的后继者是其最右边的祖先。如果您遵循从根到节点的路径,那么这就是您最后离开的路径。
相关问题