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

相关推荐

我是小红是我:学校换成中南
点赞 评论 收藏
分享
10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务