问题描述:
给定一个二叉树,查找某个节点的下一个节点
思考:略
代码(java):
public class FindNextNode {
static class Node{
private int val;
private Node left;
private Node right;
private Node parent;
public Node(int val) {
this.val = val;
}
@Override
public String toString() {
return val + "";
}
}
public static Node findNextNode(Node thisNode){
if (thisNode == null) {
return null;
}
Node next = null;
//1,节点有右子树,那么它的下一个节点就是它右子树最左节点
if(thisNode.right != null){
next = thisNode.right;
while(next.left != null){
next = next.left;
}
return next;
}
//2,节点没有右子树,他是父节点的左儿子,下一个节点就是父节点
if(thisNode.right == null || thisNode.parent.left == thisNode){
return thisNode.parent;
}
//3,,节点没有右子树,他是父节点的右儿子,那么使用parent指针知道找到一个节点,这个节点是它父亲的左节点,那么next为这个节点的父亲
//next == null是找到根的时候,所以就没有下一个节点
if(thisNode.right == null || thisNode.parent.right == thisNode){
next = thisNode;
while(next.parent.left != next || next != null){
next = next.parent;
}
return next;
}
return next;
}
}