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

二叉树的下一个结点

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

O(N), O(1)

  • 分类讨论,切记中序遍历,为左根右,因为需求给定结点的下一个结点,所以我们只需要讨论给定结点的右子树部分。同样扩展来说,要求给定的结点的上一个结点,只需要讨论给定结点的左子树部分

alt 分析基于题中此图

(1), pNode.right == null, 例如g结点,我们应该是沿着next往回找,且要保证往回找的结点都是遍历过的,所以加上这一判别条件,pNode.next.right == pNode,因为中序遍历-左中右,沿着next往回找的结点其实是“中”,所以是遍历过的。最后找到结点a,返回a.next即null。 可以用l结点对比来看,为什么要加那一判别条件.

(2), pNode.right != null, 例如b结点,返回以pNode.right为跟结点的子树的中序遍历的第一个结点。即是其中序遍历的下一个结点,h结点

public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode) {//中序遍历,左根右
    if(pNode.right == null){
        while(pNode.next != null && pNode.next.right == pNode){//mark
            pNode = pNode.next;
        }
        return pNode.next;
    }else{
        return getStart(pNode.right);
    }

}

public TreeLinkNode getStart(TreeLinkNode root){//正常中序遍历中,第一个结点
    if(root == null) return root;
    
    while(root.left != null){
        root = root.left;
    }
    
    return root;
}
}
全部评论

相关推荐

05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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