- 问题描述
查找某个节点的中序遍历的后继节点,没有则返回空。 - 解决方案
有三种情况:1.节点的右子树不为空,则返回右子树中最左的节点;2.节点的右子树为空且节点是父节点的左节点,则返回父节点即可;3.节点右子树为空且是父节点的右节点,则一直向上查找,直至找到某个节点是其父节点的左节点,返回该父节点,找不到则返回空。代码如下:
public class GetSuccessorNode {
public static void main(String[] args){
Node2 root = new Node2(1);
root.left = new Node2(2);
root.left.parent = root;
root.left.left = new Node2(4);
root.left.left.parent = root.left;
root.left.right = new Node2(5);
root.left.right.parent = root.left;
root.right = new Node2(3);
root.right.parent = root;
root.right.left = new Node2(6);
root.right.left.parent = root.right;
root.right.right = new Node2(7);
root.right.right.parent = root.right;
System.out.println(getSuccessorNode(root.right).value);
}
public static Node2 getSuccessorNode(Node2 node){
if(node == null)
return null;
if(node.right != null){
node = node.right;
while(node.left != null){
node = node.left;
}
return node;
}
else if(node.parent.left == node){
return node.parent;
}
else{
while(node.parent != null && node.parent.left != node){
node = node.parent;
}
return node.parent;
}
}
}
class Node2{
int value;
Node2 left;
Node2 right;
Node2 parent;
public Node2(int value){
this.value = value;
this.left = null;
this.right = null;
}
}