剑指offer-面试题8

Posted 晓锋残月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer-面试题8相关的知识,希望对你有一定的参考价值。

1. 基本知识复习

对于二叉树中寻找下一节点是一个重要知识点,首先以中序排序寻找为例,如图:

在上图中中序遍历序列为dbheiafcg

现在分为两大种情况:

1.该节点有右孩子,则下一节点为他右子树的中序遍历的第一个值(例如b的下一节点为h

2.该节点没有右孩子,则需要去找其父亲节点(反正结果一定是一个父节点或则null)

2.1 如果该节点是父亲节点的左孩子,那么下一节点就是该父节点(例如d的下一节点是b

2.2 如果该节点是父亲节点的右孩子,那么需要沿着父节点向上遍历,直到找到那个是父节点的左孩子的节点,那么下一节点是该父节点。(例如b的父节点a就是节点i的下一节点)

2.3 如果遍历到root根节点仍然没有找到是父节点左孩子的节点,那么则返回None (例如节点g没有下一节点)

2. 面试题8

题目:

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

分析:

分析过程可以参考前面的基本知识学习。

public TreeLinkNode getNext(TreeLinkNode pNode)

    // 1,首先判断为空的情况
    if(pNode == null)
        return null;
    

    // 2.当前节点有右子节点
    TreeLinkNode curr = pNode;
    if(null != pNode.right)
        //则去找最左边的子节点即可
        curr = curr.right;
        while (curr.left!=null)
            curr = curr.left;
        
        return curr;
    // 3.当前节点没有由右子节点
    else 
        //就去父节点中找,反正得到的结果一定是一个父节点
        //下面这个可以考虑i节点的下一节点是a的情况
        while(curr.next !=null && curr == curr.next.right)
            curr = curr.next;
        
        return curr.next;
    

3. 小结

上面便是二叉树下一节点的寻找的学习,其中对于第二种情况下需要认证考虑。

参考资料:

以上是关于剑指offer-面试题8的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer 面试题7.重建二叉树

剑指offer 面试36题

剑指offer 面试37题

剑指offer-面试题7-重建二叉树-二叉树

二叉树层次遍历(剑指Offer面试题32:从上到下打印二叉树)

剑指Offer[Python版]