8 二叉树的下一个节点
分三种情况:
- 当前节点有右子树,下一个节点是右子树中最左的节点
- 无右子树
- 父节点的左孩子是当前节点,下一个节点是父节点
- 遍历该节点的父节点,直到父节点的左孩子是当前节点,下一个节点是父节点
- 向上一直找,返现node结点的父节点为null,说明无后继结点了
public class P08FindBinaryTreeNextNode {
private static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode parent;
public TreeNode(int val) {
this.val = val;
}
}
public static TreeNode findNextNode(TreeNode node){
if (node ==null){
return null;
}
//有右孩子,右孩子最左的节点
if (node.right !=null ){
return getMostLeft(node.right);
}else{
TreeNode parent = node.parent;
while (parent != null && parent.left != node){
node = parent;
parent = node.parent;
}
return parent;
}
}
//得到右子树最左的节点
private static TreeNode getMostLeft(TreeNode node){
while (node.left != null){
node = node.left;
}
return node;
}
}