我用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
但是不起作用。
答案 0 :(得分:1)
有两种情况: