剑指Offer_8二叉树的下一个结点

8 二叉树的下一个节点

1571056951976

分三种情况:

  1. 当前节点有右子树,下一个节点是右子树中最左的节点
  2. 无右子树
  • 父节点的左孩子是当前节点,下一个节点是父节点
  • 遍历该节点的父节点,直到父节点的左孩子是当前节点,下一个节点是父节点
  1. 向上一直找,返现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;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45399846/article/details/107558182