题解 | #二叉树的下一个结点# Java

二叉树的下一个结点

http://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e

/*
public class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public TreeLinkNode GetNext(TreeLinkNode root) {
        if (root == null) {
            return null;
        }
        TreeLinkNode cur = root;
        // 如果当前节点有右子树
        // 那么答案就是右子树中最左边的节点
        if (cur.right != null) {
            cur = cur.right;
            while (cur.left != null) {
                cur = cur.left;
            }
            return cur;
        }
        // 当前节点没有右子树
        // 判断当前节点是其父节点的左子树还是右子树
        while (cur.next != null) {
            TreeLinkNode parent = cur.next;
            // 如果当前节点是其父节点的左子树,那么答案就是父节点
            if (parent.left == cur) {
                return parent;
            }
            // 如果当前节点是其父节点的右子树,继续向上回溯
            cur = parent;
        }
        return null;
    }
}
全部评论

相关推荐

喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务