1 题目描述

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

2 思路和方法

  中序遍历,下一个结点有两种情况

  a. 当前结点有右子树,就找出右子树中的最左的结点;

  b. 当前结点没有右子树  就往它的父节点找,找到第一个结点是它的父节点的左子节点的结点时停止,下一个结点就是该节点的父节点;

作如下表述:

(1)’:有右子树的,那么下个结点就是右子树最左边的点;

(2)’:没有右子树的,给出结点是父结点的左孩子,返回父结点;

(3)’:没有右子树,给出结点是父结点的右孩子,把给出结点的父节点作为下一个遍历的节点,向上回溯,直到当前结点是其父节点的左孩子时停止【直到找到一个父节点X,并且这个父节点X是其本身的父节点Y的左孩子为止】,下一个结点就是当前结点的父节点proot【return proot】。【TreeLinkNode *proot=pNode->next;proot->left==pNode,pNode是当前节点,pNode->next是当前节点的父节点,proot->left是其父结点的左结点】,

例子: 先序遍历:1 2 4 6 7 5 8 3(根左右);  中序遍历:6 4 7 2 5   3(左根右)【给出的结点为8,下一个结点为1为例】  后序遍历:6 7 4 8 5 2 3 1(左右根)

3 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) { }
};
*/
class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if(pNode==NULL)
return NULL;
if(pNode->right!=NULL)
{
pNode=pNode->right;
while(pNode->left!=NULL)
pNode=pNode->left; //有右子树的,那么下个结点就是右子树最左边的点
return pNode;
}
while(pNode->next!=NULL)
{ //pNode,是当前节点
TreeLinkNode *proot=pNode->next; //proot,当前节点的父节点
if(proot->left==pNode) //proot->left,当前节点的父节点的左结点
return proot;
pNode=pNode->next;
}
return NULL;
}
};

参考资料

https://blog.csdn.net/langxue4516/article/details/82292216

剑指offer57:二叉树的下一个结点的更多相关文章

  1. 剑指Offer——二叉树的下一个结点

    题目描述: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 分析: 如果该结点存在右子树,那么返回右子树的最左结 ...

  2. 剑指offer58 二叉树的下一个结点

    自己写的 class Solution { public: TreeLinkNode* GetNext(TreeLinkNode* pNode) { if(pNode == NULL) return ...

  3. 每天一道剑指offer-二叉树的下一个结点1

    题目 每天一道剑指offer-二叉树的下一个结点https://www.nowcoder.com/practice/ef068f602dde4d28aab2b210e859150a?tpId=13&a ...

  4. 每天一道剑指offer-二叉树的下一个结点

    题目 每天一道剑指offer-二叉树的下一个结点 https://www.nowcoder.com/practice/ef068f602dde4d28aab2b210e859150a?tpId=13& ...

  5. 剑指Offer-二叉树的下一个结点

    题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 思路 分析二叉树的下一个节点,一共有以下情况: 二叉树 ...

  6. 剑指offer-08 二叉树的下一个节点

    剑指offer第8题,本来想找leetcode上对应的题,后来没找到,直接去牛客网上刷了. 题目描述: 给定一个二叉树和其中的一个结点(pNode),请找出中序遍历顺序的下一个结点并且返回.注意,树中 ...

  7. 【Java】 剑指offer(7) 二叉树的下一个结点

    本文参考自<剑指offer>一书,代码采用Java语言.  更多:<剑指Offer>Java实现合集 题目 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?  ...

  8. 【剑指Offer】二叉树的下一个结点 解题报告(Python)

    [剑指Offer]二叉树的下一个结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  9. 【剑指offer】面试题 8. 二叉树的下一个结点

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

  10. 剑指offer:JZ8 二叉树的下一个结点

    JZ8 二叉树的下一个结点 描述 给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针.下图为一棵有9个节点的二叉 ...

随机推荐

  1. C++标准库分析总结(二)——<模板,分配器,List>

    本节主要总结模板及其类模板分类以及STL里面的分配器.容器内部结构以及容器之间的关系和分类,还介绍了容器中List的结构分布 1.源代码版本介绍 1.1 VC的编译器源码目录: 2.类模板 2.1 类 ...

  2. css3 perspective与translateZ变换

    css3中的坐标系,rotateX就是绕着x轴旋转,rotateY就是绕着Y轴旋转,rotateZ就是绕着z轴旋转(也就是xy平面的旋转). perspective属性用来设置视点,在css3的模型中 ...

  3. 怎么样使用vuex

    https://www.cnblogs.com/songrimin/p/7815850.html

  4. meshing-做类似ICEM的Y型剖分

    ​原视频下载地址:https://yunpan.cn/cqjeKkrhwwN3x  访问密码 c724

  5. Java枚举知识点

    近几天从单例模式及阿里开发手册中遇到枚举,之前没怎么关注过. 便学习一下,此次看了多方资料,并写Demo实现,记录下知识点,方便之后巩固. 枚举的两个优点: 1. 保证了类型安全:调用者无法随意传一个 ...

  6. layui问题之模拟select点击事件

    一.问题 不操作页面,实现模拟select的事件,即,自动出现下拉框,自动点击下拉框的值,select文本框的值随之改变 二.经过 刚开始查看layui官方文档,发现仅仅只是有select监听事件,即 ...

  7. Apache RocketMQ 的过去、现在和未来 原创: DataPipeline DataPipeline数见科技 前天

    Apache RocketMQ 的过去.现在和未来 原创: DataPipeline DataPipeline数见科技 前天

  8. mac kafka 环境搭建 以及PHP的kafka扩展

    1.kafka安装 brew install kafka 安装会依赖zookeeper. 注意:安装目录:/usr/local/Cellar/kafka/0.10.2.0 2.安装的配置文件位置 /u ...

  9. 目标检测中的选择性搜索-selective search-没弄

    https://blog.csdn.net/small_munich/article/details/79595257 https://www.cnblogs.com/zyly/p/9259392.h ...

  10. linux下nginx结合keepalived实现主从切换的配置

    linux下nginx结合keepalived实现主从切换的配置   解决方法: 实现一个主nginx宕机,请求转到另一个nginx中. 1.确保两台nginx已启动,假如端口分别是192.168.0 ...