二叉树某结点在中序遍历的下一个结点

二叉树的下一个结点

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

1. 分情况列举

1.1 分析

  1. 有右孩,返回右子树的中序最左结点
  2. 无右孩,且它是父亲的左孩,则返回其父
  3. 无右孩,且它是其父亲的右孩,则从它父亲开始往上找, 直到某个结点,它是其父亲的左孩,返回其父亲。

1.2 代码

/*
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)
    {
        //1. 有右孩,返回右子树的中序最左结点
        if(pNode.right != null){
            TreeLinkNode node = pNode.right;
            while(node.left != null){
                node = node.left;
            }
            return node;
        }
        //2. 无右孩,且它是父亲的左孩,则返回其父
        if(pNode.next != null && pNode == pNode.next.left){
            return pNode.next;
        }
        //3. 无右孩,且它是其父亲的右孩,则从它父亲开始往上找
        //直到某个结点,它是其父亲的左孩,返回其父亲
        if(pNode.next != null && pNode == pNode.next.right){
            TreeLinkNode node = pNode.next;
            while(node.next != null && node.next.left != node){
                node = node.next;
            }
            return node.next;
        }
        //4. 没有右孩的根节点
        return null;
    }
}

1.3 复杂度

空间:O(1)
时间:O(h), h = log_n

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 11:29
已编辑
斯卡蒂味的鱼汤:知道你不会来数马,就不捞你😂最近数马疯狂扩招,招聘要求挺低的,你能力肯定够,应该就是因为太强了,知道你不会来才不捞你
投递腾讯云智研发等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务