美文网首页算法与数据结构二叉树之下数据结构和算法分析
剑指Offer57 二叉树的下一个节点(深入理解遍历顺序)

剑指Offer57 二叉树的下一个节点(深入理解遍历顺序)

作者: 北国雪WRG | 来源:发表于2019-01-22 22:35 被阅读1次

    给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

    1. 如果该节点存在右子树,那么下一个节点在右子树上
    2. 如果该节点不存在右子树,说明以这个节点为根节点的树被遍历完成。回溯
    3. 回溯的时候要注意两点
      • 回溯的结束的条件是当前节点不是父亲的右儿子
      • 回溯到了根节点,根节点的父亲是null
    public class Solution {
        public TreeLinkNode GetNext(TreeLinkNode pNode){
            // 如果存在右子树
            if(pNode.right != null) {
                pNode = pNode.right;
                while(pNode.left != null) pNode = pNode.left;
                return pNode;
            }
            // 以该节点为根节点的子树遍历完成,回溯
            while(pNode.next !=null && pNode.next.right == pNode){
                 pNode = pNode.next;
            }
            return pNode.next;
        }
    }
    

    相关文章

      网友评论

        本文标题:剑指Offer57 二叉树的下一个节点(深入理解遍历顺序)

        本文链接:https://www.haomeiwen.com/subject/jqerjqtx.html