有父节点二叉树找中序遍历后继节点
2018-01-20 22:42
417 查看
数据结构精妙至极!
求后继节点:
1)为NULL,返回NULL;
2)节点有右子树,则返回右子树的最左节点;
3)没有右子树则向父节点求
**这时候有两个情况,如果该节点是父节点的左节点,则返回父节点。
否则判断该父节点,若该父节点是其父节点的左节点则返回该父节点,否则再判断它的父节点……这样一直到根节点,如果还没有得到结果,则返回为NULL**
求后继节点:
1)为NULL,返回NULL;
2)节点有右子树,则返回右子树的最左节点;
3)没有右子树则向父节点求
**这时候有两个情况,如果该节点是父节点的左节点,则返回父节点。
否则判断该父节点,若该父节点是其父节点的左节点则返回该父节点,否则再判断它的父节点……这样一直到根节点,如果还没有得到结果,则返回为NULL**
/* struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *parent; TreeLinkNode(int x) :val(x), left(NULL), right(NULL), parent(NULL) { } }; */ class Solution { public: TreeLinkNode* GetNext(TreeLinkNode* pNode) { if(pNode==NULL) return NULL; TreeLinkNode *p=pNode->right; if(p!=NULL) { while(p->left!=NULL) p=p->left; return p; } else { while(pNode->parent!=NULL) { if(pNode->next->left==pNode) return pNode->parent; pNode=pNode->parent; } } return NULL; } };
相关文章推荐
- 二叉树寻找中序遍历的后继节点
- 二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)
- 4.6 找出二叉树中指定节点的下一个节点(中序后继),假定每个节点有父指针。
- 非递归遍历二叉树(前序,中序,后序,叶子节点的计算)
- 二叉树的中序、先序、后序、层序遍历 & 二叉树的深度 & 节点查找
- 给定先序:ABCDEFGHIJK 给定中序:CBEDGFAHJIK 首先分析上述给定的先,中序,首先得知先序遍历的肯定是二叉树的根节点:A,在看中序遍历,根据中序遍历的原理可知,在A左边的一定全部属于
- 已知先序遍历和中序遍历,求后序遍历 && 求二叉树中节点的最大距离
- [C/C++] 先序建立二叉树| 先序、中序、后序遍历二叉树| 求二叉树深度、节点数、叶节点数 算法实现
- 二叉树的先序 中序 后序 层次遍历 求叶节点个数、深度、最大元、最小元
- 二叉树的遍历 插入 查找 删除 最大值 最小值 前驱 后继节点的查找
- 数据结构_输出二叉树中先序、中序、后序遍历方式中第k个节点的数据
- c语言实现二叉树先序,中序,后序(递归),层次遍历,求叶子节点个数及树的深度,下一篇写非递归的遍历
- 二叉树的实现&&递归和非递归方式前序、中序、后续遍历&&发现一个节点中序遍历的下一节点
- 二叉树 BinaryTree (先序、中序、后序遍历 节点查找、插入、删除 完整类) Java数据结构与算法
- java 创建二叉树 前序、中序、后续 递归遍历树 和 非递归遍历,递归求树高,递归求树节点数
- 二叉树的的所有操作——转化为静态二叉链表,求深度,求先序排列,求中序排列,求后序排列,求层次遍历,求度为0.1.2的节点个数
- 二叉树的各种操作 先序 中序 后续 层次 遍历 求树高度 节点深度 知先序中序求后续 二叉排序树
- 给出二叉树,将二叉树进行中序线索化,在根据中序线索化二叉树,找出给定节点的前序后继节点,和给出节点的后序后继节点
- 二叉树 BinaryTree (先序、中序、后序遍历 节点查找、插入、删除 完整类) Java数据结构与算法
- PAT树_层序遍历叶节点、中序建树后序输出、AVL树的根、二叉树路径存在性判定、奇妙的完全二叉搜索树、最小堆路径、文件路由