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

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

题目面试

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

如:中序遍历序列为 {d,b,h,e,i,a,f,c,g}。ide

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

问题分析测试

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

根据中序遍历的规律(先遍历左子节点,而后遍历根节点,最后遍历右子节点),下一节点可能存在的状况以下。3d

动画实现指针

状况一:若是查找的节点有右子树,则下一结点在它右子树的最左子节点。以下图中的 b 节点的下一节点为 h 节点blog

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

若是右子树没有左子节点,则下一节点为右子节点。以下图中的 c 节点的下一节点为 g 节点ip

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

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

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

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

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

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

代码实现

JavaScript

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

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

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

测试用例

  • 普通测试 —— 彻底二叉树、非彻底二叉树

  • 特殊测试 —— 只要左子节点的二叉树、只有右子节点的二叉树、只有一个结点

  • 输入测试 —— 空节点
相关文章
相关标签/搜索