动画:面试算法之求二叉树的下一节点

Posted 程序员专栏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动画:面试算法之求二叉树的下一节点相关的知识,希望对你有一定的参考价值。


点击右侧关注,了解黑客的世界!

点击右侧关注,掌握进阶之路!

点击右侧关注,探讨技术话题!


作者 |  小鹿

来源 |  小鹿动画学编程(Web_Coding)


题目



给定一棵二叉树和其中的一个的节点,如何找出中序遍历的下一节点。树中的节点除了有两个分别指向左、右子树的指针,还有一个指向父节点的指针。


如: 中序遍历序列为 {d,b,h,e,i,a,f,c,g}。
动画:面试算法之求二叉树的下一节点


问题分析

动画:面试算法之求二叉树的下一节点



我们根据题目进行分析,要想求出其中一个树节点中序遍历的下一节点是什么,我们需要对每个单独的情况分别进行分析。


根据中序遍历的规律(先遍历左子节点,然后遍历根节点,最后遍历右子节点),下一节点可能存在的情况如下。


动画实现

动画:面试算法之求二叉树的下一节点



情况一: 如果查找的节点有右子树,则下一结点在它右子树的最左子节点。 如下图中的 b 节点的下一节点为 h 节点


动画:面试算法之求二叉树的下一节点


如果右子树没有左子节点,则下一节点为右子节点。 如下图中的 c 节点的下一节点为 g 节点


动画:面试算法之求二叉树的下一节点


情况二: 如果当前节点没有右子树且是父节点的左子节点,则它的下一节点是它的父节点。 如下图中的 d 节点的下一节点为 b 节点。


动画:面试算法之求二叉树的下一节点


情况三: 如果当前的节点没有右子树且是父节点的右子节点。 对于这种情况,我们就一直向它的父节点遍历,直到找到第一个是父节点的左子节点的节点。 如果该节点的父节点存在,则父节点就是要查找的下一节点。 如下图中的 i 的下一节点为 a。


动画:面试算法之求二叉树的下一节点


再比如没有找到这样的节点,下节点为空。 如图中的 g 节点的下一结点为空。


代码实现

动画:面试算法之求二叉树的下一节点



JavaScript
动画:面试算法之求二叉树的下一节点
Java
动画:面试算法之求二叉树的下一节点
Python
动画:面试算法之求二叉树的下一节点


测试用例

动画:面试算法之求二叉树的下一节点



  • 普通测试 —— 完全二叉树、非完全二叉树
  • 特殊测试 —— 只要左子节点的二叉树、只有右子节点的二叉树、只有一个结点
  • 输入测试 —— 空节点


 推荐↓↓↓ 

以上是关于动画:面试算法之求二叉树的下一节点的主要内容,如果未能解决你的问题,请参考以下文章

面试---算法面试

算法题之求二叉树的最大距离

面试题:二叉树的下一个节点

面试题8:二叉树的下一个节点

面试题8:二叉树的下一个节点

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