题目描述

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

思路分析

  1. 链表的结构中 有指向父结点的指针,方法输入为二叉树的头结点
  2. 分为两种情况:
    • 若当前结点有右子树时,它中序遍历的下一个结点为 它的右子树中的最左子结点;
    • 若当前结点没有右子树时:
      • 该结点是它父结点的左子结点,那么它的下一个结点即它的父节点;
      • 该结点是它父结点的右子结点,那么他的下一个结点就需要沿着它的父节点链进行搜寻,如果搜寻到 一个结点是它父结点的左子结点(复现第一种情况),是那么下一个结点即为此结点的父结点。

Java代码

public static TreeNodeWithParent GetNext(TreeNodeWithParent tree) {
return Solution1(tree);
} /**
*
* @param tree
* @return
*/
private static TreeNodeWithParent Solution1(TreeNodeWithParent tree) {
if (tree == null) {
return null;
}
TreeNodeWithParent p = tree; if (p.right != null) {
p = p.right;
while (p.left != null) {
p = p.left;
}
return p;
}
while (p.parent != null) {
if (p == p.parent.left) {
return p.parent;
}
p = p.parent;
}
return null;
}

代码链接

剑指Offer代码-Java

最新文章

  1. 基于jQuery左右滑动切换特效 附源码
  2. Linux-002-执行命令时,提示: -bash: {命令}: command not found
  3. unity平台的预处理
  4. [转]Snappy压缩库安装和使用之一
  5. 误导人的接口(interface)
  6. 前谷歌首席 Java 架构师谈如何设优秀的 API
  7. 10.5 noip模拟试题
  8. vb安装过程中 ntvdm.exe[9696]中发生未处理的win32异常
  9. 限定只能处理"A仓"和"B仓"入库
  10. SQLite数据库查看工具(免费)
  11. Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序
  12. Python爬虫入门:Cookie的使用
  13. 基于ITextSharp插件在ASP.NET MVC中将图表导出为PDF
  14. ASP.NET MVC页面报错System.InvalidOperationException The view found at '~/Views/Home/Index.cshtml' was not created.
  15. 你不可不知的Java引用类型之——WeakReference源码详解
  16. Shell-2--输入输出重定向
  17. CS190.1x-ML_lab4_ctr_student
  18. 蜻蜓FM下载文件名还原
  19. 三.插入和查找MySQL记录 数据类型
  20. Python面试题之Python正则表达式re模块

热门文章

  1. Shiro权限管理框架(三):Shiro中权限过滤器的初始化流程和实现原理
  2. 禅道、jenkins部署记录
  3. 【算法】【查找】二分法 Bisection
  4. 【Java例题】3.5 级数之和
  5. mysql limit分页查询效率比拼
  6. Flink 源码解析 —— 源码编译运行
  7. 【Aizu - 2249】Road Construction(最短路 Dijkstra算法)
  8. Go类型别名与类型定义区别
  9. ansible之数据提取与Juniper实例演示
  10. [HEOI2013]SAO(树上dp,计数)