剑指offer第二版面试题8:二叉树的下一个节点(java)

原创 2018年04月17日 21:50:52

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

分析:
根据中序遍历的特点,要找到一个节点的下一个节点无非就是三种情况:
1、有右子树,这时只需要把其右孩子作为下一个遍历的(并不是要找的)节点,然后沿着该节点的左子树(如果有的话)出发,直到遇到叶子节点,那么该叶子节点就是其下一个要找的节点;
2、没有右子树,则判断该节点是否是其父节点的左孩子,如果是则其下一个要找的节点是其父节点;
3、如果不是其父节点的左孩子,则把其父节点作为下一个遍历的节点,向上回溯,直到找到节点没有父节点或者节点是其父节点的左孩子为止。
综合这三种情况就可以找到二叉树中任意一个节点的下一个节点。

代码如下:

public class FindNextNode {

    public BinaryTreeNode getNextNode(BinaryTreeNode pNode) {

        if (pNode == null) {
            return null;
        }
        BinaryTreeNode tempNode = null;

        // 如果该节点有右子节点
        if (pNode.getRight() != null) {
            tempNode = pNode.getRight();
            while (tempNode.getLeft() != null) {
                tempNode = tempNode.getLeft();
            }
            return tempNode;
        }

        // 如果该节点没有右子节点,它是其父节点的左子节点
        if (pNode.getFather() == null)
            return null;
        if (pNode.getFather().getLeft() == pNode) {
            return pNode.getFather();
        }

        // 如果该节点没有右子节点,它是其父节点的右子节点
        tempNode = pNode.getFather();
        while (tempNode.getFather() != null) {
            if(tempNode.getFather().getLeft() == tempNode){
                return tempNode.getFather();
            }
            //继续向上找父节点
            tempNode = tempNode.getFather();
        }
        return null;

    }

}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37672169/article/details/79981499

Python算法实战视频课程--二叉树

-
  • 1970年01月01日 08:00

剑指Offer(第二版)面试题8:二叉树的下一个节点

(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/71684216冷血之心的博客)剑指Offer面试题8:二叉树的下一个...
  • qq_25827845
  • qq_25827845
  • 2017-05-11 22:05:37
  • 1213

【面试题】剑指offer 8

统计数组中各个数字出现的次数 #include using namespace std; void SortAge(int ages[],int length) { if (ages==NULL...
  • shangguan_1234
  • shangguan_1234
  • 2017-03-01 19:48:00
  • 72

<剑指offer 面试题8>二叉树的下一个节点(Java)

public class Inteview7_1 { /** * 题目:给定一科二叉树和其中一个节点, * 如何找出中序遍历序列的下一个节点? * 书中的节点除了有两个分别指向左右节点...
  • sytloveyxj
  • sytloveyxj
  • 2017-12-29 20:56:25
  • 143

剑指Offer实现面试题8-二叉树的下一个节点

题目摘至:《剑指Offer名企面试精讲典型编程题》    给定一棵二叉树和其中一个节点,如何找出中序遍历序列的下一个节点?书中的节点除了有两个分别指向左右节点的指针,还有一个指向父节点的指针。    ...
  • qq_34644183
  • qq_34644183
  • 2018-03-01 15:14:17
  • 35

剑指offer——二叉树的下一个节点

题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:根据中序遍历的特点,要找到一个节点的下一个节点无非...
  • sbq63683210
  • sbq63683210
  • 2016-07-06 15:34:52
  • 1486

剑指offer-面试题58:二叉树的下一个结点

题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。 思路:举一个例子,容易发现规律。这个问题可以分为两...
  • moses1213
  • moses1213
  • 2016-05-02 15:35:10
  • 363

剑指offer:找到二叉树中序遍历的下一个节点

//题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。 //注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 //思路:分为三种情况: ...
  • crazyacm
  • crazyacm
  • 2016-04-02 17:09:26
  • 1474

剑指Offer--二叉树的下一个节点

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。...
  • strongyoung88
  • strongyoung88
  • 2015-11-08 22:11:21
  • 743

《剑指offer》二叉树的下一个结点

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】 题目链接:http://www.nowcoder.com/p...
  • libin1105
  • libin1105
  • 2015-09-13 22:41:39
  • 1114
收藏助手
不良信息举报
您举报文章:剑指offer第二版面试题8:二叉树的下一个节点(java)
举报原因:
原因补充:

(最多只允许输入30个字)