如题:

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

这道题目考察对二叉树中序遍历的理解,做题的时候,如果没有思路,简单画画图,可以帮助理解。

上图没有画出指向父节点的指针,不过,不妨碍分析问题。已知节点,求中序遍历后一个节点。

如果节点存在右子树,显然,后一个节点位于右子树上最左边位置,递归查找即可。

如果没有右子树,且为根节点,显然,这时候没有下一个节点。

如果存在父节点,分为两种情况,如果是父节点的左孩子,下一个节点就是父节点。

如果是父节点的右孩子,这时候,继续顺着父节点指针网上搜索,直到找到一个位于左孩子的父节点,如上图中的19,是20的左孩子,8的后一个节点即是20。反之,若是,找不到,则没有。如上图右下角的7,父节点都位于右孩子。

经过上述分析可知,总共4种情况,依次处理即可。这道题如果没有思路,一定要画图。

下面是本题的c++解法:

/*
struct TreeLinkNode {int val;struct TreeLinkNode *left;struct TreeLinkNode *right;struct TreeLinkNode *next;TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {}
};
*/
//这道题画图结合图形可以分析仅存在三种情况
//1. 节点存在右子树,此时,找到右子树最左节点即可。
//2. 没有父节点可直接返回。
//3. 节点不存在右子树且其存在父节点,且为父节点的左孩子,此时,返回父节点.
//4. 节点为父节点右子树,此时,递归向上查找,找到为左孩子的父节点,返回即可。
class Solution {
public:TreeLinkNode* GetNext(TreeLinkNode* pNode){//特殊情况处理if (pNode == nullptr)return nullptr;//1. 存在右子树,找到最左节点if (pNode->right){pNode = pNode->right;while(pNode->left)pNode = pNode->left;return pNode;}//2. 不存在右子树,且为根节点if (pNode->next == nullptr)return nullptr;//3. 存在父节点,且为父节点的左孩子if (pNode->next->left == pNode)return pNode->next;//4. 存在父节点,且为父节点的右孩子pNode = pNode->next;while (pNode && pNode->next){if (pNode == pNode->next->left)return pNode->next;elsepNode = pNode->next;}return nullptr;}
};

=============================================================================================

Linux应用程序、内核、驱动、后台开发交流讨论群(745510310),感兴趣的同学可以加群讨论、交流、资料查找等,前进的道路上,你不是一个人奥^_^。

《剑指offer》c++版本 8.二叉树的下一个结点相关推荐

  1. 剑指offer(C++)-JZ8:二叉树的下一个结点(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结 ...

  2. 剑指offer面试题[58]-二叉树的下一个结点

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

  3. 《LeetCode力扣练习》剑指 Offer 28. 对称的二叉树 Java

    <LeetCode力扣练习>剑指 Offer 28. 对称的二叉树 Java 一.资源 题目: 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的 ...

  4. leetcode 打印_剑指 Offer 32 - III 从上到下打印二叉树 III - leetcode 剑指offer

    题目难度: 中等 原题链接 今天继续更新剑指 offer 系列, 这道题相比昨天那道题多了个每层打印方向不同的需求, 聪明的你想到应该如何实现了吗? 老样子晚上 6 点 45 分准时更新公众号 每日精 ...

  5. LeetCode Algorithm 剑指 Offer 28. 对称的二叉树

    剑指 Offer 28. 对称的二叉树 Ideas 一开始想的有问题,看了例子以为对称二叉树的中序遍历序列是回文数组,然后就用这么写了,结果到第192个测试用例[1,2,2,2,null,2]就失败了 ...

  6. 【LeetCode】剑指 Offer 32 - III. 从上到下打印二叉树 III

    [LeetCode]剑指 Offer 32 - III. 从上到下打印二叉树 III 文章目录 [LeetCode]剑指 Offer 32 - III. 从上到下打印二叉树 III package o ...

  7. 【LeetCode】剑指 Offer 32 - II. 从上到下打印二叉树 II

    [LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II 文章目录 [LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II 一.层序遍历 BFS 一. ...

  8. 【LeetCode】剑指 Offer 28. 对称的二叉树

    [LeetCode]剑指 Offer 28. 对称的二叉树 文章目录 [LeetCode]剑指 Offer 28. 对称的二叉树 一.递归 一.递归 对称二叉树定义:对于书中任意两个对称结点 L 和 ...

  9. 剑指offer——复习1:二叉树三种遍历方式的迭代与递归实现

    剑指offer--复习1:二叉树三种遍历方式的迭代与递归实现 20180905更新:这个博客中的解法不是很好,看相应的LeetCode题目笔记~~~ 我感觉此博客中的说法更容易让人理解:https:/ ...

最新文章

  1. 不用se11创建表结构,作smartforms
  2. 8 个 Python 实用脚本,赶紧收藏备用!
  3. win64环境下的一些配置
  4. 算法题+JVM+自定义View,详细的Android学习指南
  5. UNP Chapter 22 - 信号驱动I/O
  6. Linux 比较不同命令
  7. 长沙城南学院的计算机科学,长沙理工大学城南学院计算机科学与技术专业2016年在云南理科高考录取最低分数线...
  8. Android Butterknife
  9. Netscape 重构软件倒闭了,但我仍坚定地站重写!
  10. 搭建LINUX BIND实现DNS解析
  11. mysql tcmalloc jemalloc_tcmalloc jemalloc 和ptmalloc 对比
  12. IPTV码流分析指标
  13. Android Spinner(下拉菜单)常用属性与点击事件获取值
  14. ArcGis——资源三号卫星的DSM提取流程
  15. shell脚本 空格
  16. 容器和泛型 容器重点掌握
  17. java intern_Java intern() 方法
  18. linux终端重命名文件夹命令,如何使用命令行轻松重命名文件?
  19. Windows常用必备软件整理,太全了,值得收藏
  20. jacob java excel_12、借助Jacob实现Java打印报表(Excel、Word)

热门文章

  1. 讨论IM软件企业知识—会谈session的概念,附连到IM软件层次图
  2. eclipse 和myEclipse 项目导入
  3. php header
  4. iframe ajax上传,ajax--iframe模拟ajax文件上传效果
  5. 用于计算机视觉领域的python第三方库是什么_大量Python开源第三方库资源分类整理,含菜鸟教程章节级别链接...
  6. java项目包创建顺序_java程序初始化的顺序
  7. jna 不是有效的 win32 应用程序_教你打开程序提示不是有效的win32程序怎么办
  8. 【Paper】31_[18]On a Dynamic Extension of the Theory of Graphs
  9. 【数理知识】神仙文章(回忆大学所学)常微分方程
  10. OFDM | 基本原理(一)