剑指offer之二叉树的下一个结点
1 问题
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针
2 分析
比如我现在的二叉树如下
42 61 3 5 7
这里分3种情况
1) 如果这个节点包含右子树,那么下一个节点就是这个右子树的最左下节点,比如节点4的下一个节点是5.
2) 如果这个节点不包含右子树,如果这个节点的父节点的左子节点是同一个,那么下一个节点就是这个节点的父节点,比如节点6的下一个节点就是7.
3) 如果这个节点不包含右子树,如果这个节点的父节点的右子节点是同一个,这里分2种情况,我们先找到这节点的父结点,然后父节点的指针一直向上遍历,直到找到一个是它父结点的左子结点的结点。如果这样的结点存在,那么这个结点的父结点就是我们要找的下一个结点,比如节点3的下一个节点是4,也有可能没有下一个节点,比如节点7的下一个节点就是空。
3 代码实现
typedef struct Tree
{int value;struct Tree* left;struct Tree* right;struct Tree* parent;Tree(int value) : value(value), left(NULL), right(NULL), parent(NULL) {}Tree() : value(0), left(NULL), right(NULL), parent(NULL) {}
} Tree;Tree* getNext(Tree* node)
{if (NULL == node)return NULL;Tree* nextNode = NULL;if (NULL != node->right){Tree* rightNode = node->right;while (rightNode->left != NULL){rightNode = rightNode->left;}nextNode = rightNode;}else{Tree* currentNode = node;Tree* parentNode = currentNode->parent;while (NULL != parentNode && parentNode->right == currentNode){currentNode = parentNode;parentNode = currentNode->parent;}nextNode = parentNode;}return nextNode;
}
剑指offer之二叉树的下一个结点相关推荐
- 《剑指offer》-- 二叉树的下一个结点、对称二叉树、按之字性顺序打印二叉树、把二叉树打印成多行
一.二叉树的下一个结点: 1.题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 2.解题思路: 分析二叉树 ...
- 剑指offer值二叉树的下一个结点
题目简介 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解题思路 该题目主要考察对二叉树中序遍历规律的理解和分 ...
- 剑指offer(18) 二叉树的下一个结点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. setsail 分析二叉树的下一个节点,一共有以下情况 ...
- 剑指offer:二叉树的下一个节点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. /* struct TreeLinkNode {int ...
- 《剑指offer》二叉树的下一个节点
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解析:主要分两大类.一类:该节点有右子树,则找到右子树的最 ...
- 剑指offer——8.二叉树的下一个节点
题目: 题:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 知识点: 树的基本知识,节点的2个属性(value. ...
- 剑指offer——面试题58:二叉树的下一个结点
剑指offer--面试题58:二叉树的下一个结点 这个题要认真分析一下... Solution1: 自己想出来的破算法 /* struct TreeLinkNode {int val;struct T ...
- 《LeetCode力扣练习》剑指 Offer 27. 二叉树的镜像 Java
<LeetCode力扣练习>剑指 Offer 27. 二叉树的镜像 Java 一.资源 题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / ...
- 【LeetCode】剑指 Offer 27. 二叉树的镜像
[LeetCode]剑指 Offer 27. 二叉树的镜像 文章目录 [LeetCode]剑指 Offer 27. 二叉树的镜像 一.递归法 二.辅助栈(或队列) 一.递归法 根据二叉树镜像的定义,考 ...
最新文章
- Beginning Adaptive Layout Tutorial
- 一步一步搞定InfoPath(02)--配置VSTA
- python与excel结合-Python和Excel终于可以
- 机器人导论知识点总结
- c语言中负数_C语言中负数的模数
- PAT甲题题解-1077. Kuchiguse (20)-找相同后缀
- 手把手教你进行R语言的安装及安装过程中相关问题解决方案
- 新塘linux启动过程,NUC972调试笔记之NAND分区调整新增
- 【转】winrar命令行详解
- 从假装在腾讯,到真的360 —— 一个应届准PM的独白(面经干货)
- digispark使用
- USB数据采集卡关于高电压数据采集提供的解决方案
- 一文读懂物联网的关键技术有什么?
- 人脸检测——基于face_recognition库
- 笔记本加装固态硬盘后系统迁移,开机出现桌面闪烁问题的解决方法
- Unity il2cpp new 内存分配过程
- 华为电脑如何投屏到电视linux,华为 P30 如何投屏到电脑
- GITC--2014全球互联网技术大会正式开始售票
- 前向差分、后向差分和中心差分误差分析
- 【深度分解】听趣拍云产品经理剖析视频基础知识(2)
热门文章
- 如何修改 asp.net core 5 程序的默认端口号?
- 如何通过 C# 判断某个 IP 是否属于某IP段?
- 三分钟总览微软任务并行库TPL
- 谈谈对IOC及DI的理解与思考
- CSRobot gen:mssql-c#类型映射
- 【Azure Show】|第九期 “我的计算机入门之路” 嘉宾秦婷婷汪宇杰文轩
- 跟我一起学.NetCore之中间件(Middleware)简介和解析请求管道构建
- .NET Core 下使用 RabbitMQ
- Git 常用操作 | 重写 commit 历史
- lin-cms-dotnetcore功能模块的设计