【剑指Offer】面试题58:二叉树的下一个结点
来源:互联网 发布:联想笔记本的网络接口 编辑:程序博客网 时间:2024/05/16 06:46
整理自剑指Offer
一:题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
二:解题分析
上图红色的是指向父结点的指针
上图二叉树中序遍历的结果为 d b h e i a f c g
中序遍历的顺序:左子树,根节点,右子树
如果一个结点有右子树,那么它的下一个结点就是它右子树中最左边的结点,如a 的下一个结点 f
如果没有右子树,如果结点是它父结点的左孩子,那么它下一个结点就是它的父结点,如 d 的下一个结点 b
如果一个结点没有右子树,并且他还是父结点的右孩子。可以沿着指向父结点的指针一直向上遍历,直到找到一个是他父结点的左孩子的结点,如果这个节点存在,那么这个节点的父结点就是我们要找的下一个结点,如i的下一个结点a ,g没有下一个结点
三:代码实现
/*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) { //结点为NULL,返回NULL if(pNode==NULL) return NULL; TreeLinkNode* pTemp; //如果该结点有右子树,它的下一个结点就是右子树的最左子结点 if(pNode->right!=NULL){ pTemp=pNode->right; while(pTemp->left!=NULL){ pTemp=pTemp->left; } return pTemp; } //如果该结点是它父结点的左孩子,下一个结点就是它的父结点 //1.根节点,没有右子树,下个节点为空 if(pNode->next==NULL) return NULL; //2.非根节点 if(pNode->next->left==pNode) return pNode->next; //如果以上两种情况均不满足,该结点是其父结点的右孩子且该结点没有右子树 //沿着父结点一直向上遍历,知道找到一个是它父结点的左子结点的结点,如果存在,该结点的父结点就是我们的下一个结点 pTemp=pNode; while(pTemp->next){ //找到这样的结点 if(pTemp->next->left==pTemp){ return pTemp->next; } pTemp=pTemp->next; } //未找到这样的结点 return NULL; }};
阅读全文
0 0
- 剑指offer-面试题58:二叉树的下一个结点
- 剑指offer--面试题58:二叉树的下一个结点
- 剑指offer-面试题58-二叉树的下一个结点
- 剑指offer 面试题58 二叉树的下一个结点
- 【剑指Offer】面试题58:二叉树的下一个结点
- 剑指offer面试题[58]-二叉树的下一个结点
- 剑指offer面试题[58]-二叉树的下一个结点
- 剑指offer--面试题8:二叉树的下一个结点
- [剑指offer]面试题58:二叉树中的下一个结点
- 《剑指Offer》学习笔记--面试题58:二叉树的下一个结点
- 【剑指Offer学习】【面试题58:二叉树的下一个结点】
- 剑指offer——面试题58:二叉树的下一个结点
- 剑指Offer面试题58:二叉树的下一个节点
- 面试题58:二叉树的下一个结点
- 面试题58-二叉树的下一个结点
- 面试题58:二叉树的下一个结点
- 面试题58:二叉树的下一个结点
- 剑指offer--二叉树的下一个结点
- JetSon TK1 Ubuntu14.04 启用USB3.0
- 如何研读一篇论文?
- Codeforces Gym 100825 C. KenKen You Do It? (暴搜 + 剪枝)
- 级联操作
- luasocket 遇到的问题
- 【剑指Offer】面试题58:二叉树的下一个结点
- NZAU 1202: GCD 矩阵快速幂 gcd和fib数列一些结论
- 搭建环境过google检测,解决卡在google“正在检查网络连接”问题
- linux日志查询(tail命令、分页查询等)
- koa-源码分析
- phpstorm 编码设置
- DataExcel 设置单元格 编辑控件 radiocheck,checkbox,textedit,combotext,numberedit
- android 三种方法实现监听事件
- 如何研读一篇论文?