二叉树的下一节点
时间:2019-09-03
本文章向大家介绍二叉树的下一节点,主要包括二叉树的下一节点使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
【问题】给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
【思路】这道题目很坑人的就是parent指针不叫parent,叫做next, 也太奇葩了吧,不过无所谓啦,中序遍历的下一个节点主要分为两种情况:
情况一: 该节点存在右子树,则右子树的最左端的节点即为该节点的下一节点,我们遍历去寻找就可以了!
情况二: 该节点不存在右子树,则可以分成两种情况
1.如果该节点为右节点,那么需要一直向上遍历,直到找到某个节点是左节点,停止,则左节点的父节点为下一节点。
2.如果该节点为左节点,那么其父节点为下一节点!
/* 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 == nullptr) return nullptr; TreeLinkNode* pNext = nullptr; if(pNode->right != nullptr) //情况一:有右子树 { TreeLinkNode* pRight = pNode->right; while(pRight->left != nullptr) pRight = pRight->left; //查找右子树的最左端节点 pNext = pRight; } else if(pNode->next != nullptr) //情况二:右子树为空 { TreeLinkNode *pCurrent = pNode; TreeLinkNode *pParent = pNode->next; while(pParent != nullptr && pCurrent == pParent->right) //2.1 右子树为空且该节点为右节点,则一直向上查找,直到该节点为父节点的左节点, //则该节点的父节点为下一节点 { pCurrent = pParent; pParent = pParent->next; } //2.2 右子树为空且为左节点,则父节点为下一节点 pNext = pParent; } return pNext; } };
原文地址:https://www.cnblogs.com/zhudingtop/p/11456043.html
- Python爬虫(十一)_案例:使用正则表达式的爬虫
- Python爬虫(十二)_XPath与lxml类库
- 区块链域名热度不减 健康类英文米近六位交易
- Python爬虫(九)_非结构化数据与结构化数据
- Python爬虫(十)_正则表达式
- python爬虫(四)_urllib2库的基本使用
- 投资人榴莲又卖出一枚三拼域名
- python爬虫(五)_urllib2:Get请求和Post请求
- python爬虫(七)_urllib2:urlerror和httperror
- 双拼市场好!米友售出域名chuijia.com
- Elasticsearch--数据索引
- python爬虫(一)_爬虫原理和数据抓取
- 域名tbw.vip一口价58888元交易
- Tomcat服务器+JSP页面+MySQL数据库网站部署
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 用Laravel Sms实现laravel短信验证码的发送的实现
- kubernetes 近期进展 - 1.14-1.19
- Kubernetes 1.19.0——cronjob
- php获取微信openid方法总结
- Laravel 关联模型-关联新增和关联更新的方法
- 如何解决PHP获取不到SESSION信息之一般情况
- PHP实现通过二维数组键值获取一维键名操作示例
- laravel 判断查询数据库返回值的例子
- laravel框架数据库配置及操作数据库示例
- laravel 输出最后执行sql 附:whereIn的使用方法
- laravel框架模型、视图与控制器简单操作示例
- Laravel关系模型指定条件查询方法
- 在laravel中使用with实现动态添加where条件
- laravel Model 执行事务的实现
- 在laravel中实现事务回滚的方法