Java 做法,详细解释在注释中。

二叉树的下一个结点

http://www.nowcoder.com/questionTerminal/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 pNode)
    {
          // 三种情况来做。
        if(pNode == null) return null;
        // 1. 节点有右子树。
        if(pNode.right != null) {
            TreeLinkNode pp = pNode;
            TreeLinkNode cur = pNode.right;
            while (cur.left != null) {
                cur = cur.left;
            }
            return cur;
        } // 2. 节点无右子树,并且是其父节点的左子树
        else if(pNode.next != null && pNode.next.left == pNode) {
            return pNode.next;
        } else {
            // 3. 节点无右子树,沿着指向父节点的指针往上遍历,直到找到一个是它父节点的左子节点的节点。
            if(pNode.next == null) return null;
            TreeLinkNode father = pNode.next;
            while (father.next != null && father.next.left != father) {
                father = father.next;
            }
            return father.next;
        }
    }
}
全部评论
29行的else包括了输入节点为根节点并且没有右子树的情况?是这样吗
点赞 回复 分享
发布于 2020-04-03 02:46

相关推荐

jack_miller:杜:你不用我那你就用我的美赞臣
点赞 评论 收藏
分享
11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务