
public class SuccessNode {
public static class Node{
public int value
public Node left
public Node right
public Node parent
public Node(int data){
this.value = data
}
}
// 中序二叉树 前驱后继结点
//后继结点
public static Node getPosNode(Node node){
if(node == null){
return node
}
if(node.right != null){
return getLeftMost(node.right)
}else{
Node parent = node.parent
while(parent != null && node != parent.left){
node = parent
parent = node.parent
}
return parent
}
}
public static Node getLeftMost(Node node){
if(node == null){
return null
}
while(node.left != null){
node = node.left
}
return node
}
//前驱结点
public static Node getPreNode(Node node){
if(node == null){
return null
}
if(node.left != null){
return getRightMost(node.left)
}else{
Node parent = node.parent
while(parent != null && node != parent.right){
node = parent
parent = node.parent
}
return parent
}
}
public static Node getRightMost(Node node){
if(node == null){
return null
}
while(node.right != null){
node = node.right
}
return node
}
public static void main(String[] args) {
Node head = new Node(6)
head.parent = null
head.left = new Node(3)
head.left.parent = head
head.left.left = new Node(1)
head.left.left.parent = head.left
head.left.left.right = new Node(2)
head.left.left.right.parent = head.left.left
head.left.right = new Node(4)
head.left.right.parent = head.left
head.left.right.right = new Node(5)
head.left.right.right.parent = head.left.right
head.right = new Node(9)
head.right.parent = head
head.right.left = new Node(8)
head.right.left.parent = head.right
head.right.left.left = new Node(7)
head.right.left.left.parent = head.right.left
head.right.right = new Node(10)
head.right.right.parent = head.right
Node test = head.left.left
System.out.println(test.value + " next: " + getPosNode(test).value)
System.out.println(test.value + " pre: " + getPreNode(test))
test = head.left.left.right
System.out.println(test.value + " next: " + getPosNode(test).value)
System.out.println(test.value + " pre: " + getPreNode(test).value)
test = head.left
System.out.println(test.value + " next: " + getPosNode(test).value)
System.out.println(test.value + " pre: " + getPreNode(test).value)
test = head.left.right
System.out.println(test.value + " next: " + getPosNode(test).value)
System.out.println(test.value + " pre: " + getPreNode(test).value)
test = head.left.right.right
System.out.println(test.value + " next: " + getPosNode(test).value)
System.out.println(test.value + " pre: " + getPreNode(test).value)
test = head
System.out.println(test.value + " next: " + getPosNode(test).value)
System.out.println(test.value + " pre: " + getPreNode(test).value)
test = head.right.left.left
System.out.println(test.value + " next: " + getPosNode(test).value)
System.out.println(test.value + " pre: " + getPreNode(test).value)
test = head.right.left
System.out.println(test.value + " next: " + getPosNode(test).value)
System.out.println(test.value + " pre: " + getPreNode(test).value)
test = head.right
System.out.println(test.value + " next: " + getPosNode(test).value)
System.out.println(test.value + " pre: " + getPreNode(test).value)
test = head.right.right
System.out.println(test.value + " next: " + getPosNode(test))
System.out.println(test.value + " pre: " + getPreNode(test).value)
}
}
1 next: 2
1 pre: null
2 next: 3
2 pre: 1
3 next: 4
3 pre: 2
4 next: 5
4 pre: 3
5 next: 6
5 pre: 4
6 next: 7
6 pre: 5
7 next: 8
7 pre: 6
8 next: 9
8 pre: 7
9 next: 10
9 pre: 8
10 next: null
10 pre: 9