动画:面试算法之求二叉树的下一节点
2021-01-21 22:18
851 查看
题目
给定一棵二叉树和其中的一个的节点,如何找出中序遍历的下一节点。树中的节点除了有两个分别指向左、右子树的指针,还有一个指向父节点的指针。
如:中序遍历序列为 {d,b,h,e,i,a,f,c,g}。
问题分析
我们根据题目进行分析,要想求出其中一个树节点中序遍历的下一节点是什么,我们需要对每个单独的情况分别进行分析。
根据中序遍历的规律(先遍历左子节点,然后遍历根节点,最后遍历右子节点),下一节点可能存在的情况如下。
动画实现
情况一:如果查找的节点有右子树,则下一结点在它右子树的最左子节点。如下图中的 b 节点的下一节点为 h 节点
如果右子树没有左子节点,则下一节点为右子节点。如下图中的 c 节点的下一节点为 g 节点
情况二:如果当前节点没有右子树且是父节点的左子节点,则它的下一节点是它的父节点。如下图中的 d 节点的下一节点为 b 节点。
情况三:如果当前的节点没有右子树且是父节点的右子节点。对于这种情况,我们就一直向它的父节点遍历,直到找到第一个是父节点的左子节点的节点。如果该节点的父节点存在,则父节点就是要查找的下一节点。如下图中的 i 的下一节点为 a。
再比如没有找到这样的节点,下节点为空。如图中的 g 节点的下一结点为空。
代码实现
JavaScript
Java
Python
测试用例
-
普通测试 —— 完全二叉树、非完全二叉树
-
特殊测试 —— 只要左子节点的二叉树、只有右子节点的二叉树、只有一个结点
- 输入测试 —— 空节点
相关文章推荐
- 微软等数据结构+算法面试100题(36)-- 打印二叉树中某一层的节点
- 微软等数据结构+算法面试100题(38)-- 二叉树中任意两个节点间的最大距离
- 微软等数据结构+算法面试100题(20)--二叉树公共父节点
- 面试算法:利用链表层级打印二叉树节点
- 微软等数据结构+算法面试100题(21)--二叉树打印到叶子节点的所有路径
- leetcode:Populating Next Right Pointers in Each Node(常数空间,连接二叉树每一层所有节点)【面试算法题】
- leetcode:Populating Next Right Pointers in Each Node II (顺序连接二叉树每一层节点)【面试算法题】
- 二叉树是笔试面试中考试最频繁的数据结构之一,主要包括,程序建立一个二叉树,三种次序遍历二叉树,返回叶子节点的数目,求二叉树节点的总数等。建立一个二叉树节点的数据结构
- 面试复习-------算法与数据结构------二叉树
- 算法与数据结构面试题(11)-求二叉树中节点的最大距离
- 实现由双亲节点存储的树转化为二叉树的遍历算法实现
- 笔试面试算法经典--二叉树层次打印
- 设计一个镜面影射算法,将一个二叉树的每个节点的左,右子结点交换位置
- C++算法之 求二叉树中叶子节点的个数 与 判断两棵二叉树是否结构相同
- 微软等数据结构+算法面试100题(35)-- 二叉树的深度
- [算法总结] 20 道题搞定 BAT 面试——二叉树
- 微软算法100题11 求二叉树中两节点之间的最大距离
- 算法题16 二叉树最近公共父节点
- leetcode:Maximum Depth of Binary Tree(计算二叉树深度) 【面试算法】
- [数据结构和算法]二叉树最低公共父节点