【剑指offer-解题系列(58)】二叉树的下一个结点
来源:互联网 发布:林业优化投资率 编辑:程序博客网 时间:2024/04/18 16:39
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
分析
1、叶检点自己是左孩子:返回父节点
自己是右孩子:
(1)如果父亲是左子树,那么就返回父亲的父亲
(2)如果父亲是右子树,一直向上找到一个身为左字树的节点为止,返回他的父亲
2、not叶节点
右孩子不为空:返回右孩子的最最左的叶节点
右孩子为空:返回父节点
代码实现
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{if(!pNode)
return NULL;
if(!pNode->left&&!pNode->right){//leaf
if(!pNode->next)//空叶节点
return NULL;
if(pNode == pNode->next->left)//是父亲的左节点
return pNode->next;
if(pNode == pNode->next->right)//是父亲的右节点
{
TreeLinkNode*p=pNode ;
while(p){
if(p->next!=NULL){
if(p->next->left==p)
return p->next;
}
p=p->next;
}
return NULL;
}
}
else{
if(pNode->right==NULL){//没有右子树
TreeLinkNode*p=pNode ;//同上
while(p){
if(p->next!=NULL){
if(p->next->left==p)
return p->next;
}
p=p->next;
}
return NULL;
}
else{
TreeLinkNode*p=pNode->right;//
while(p->left){
p=p->left;
}
return p;
}
}
return NULL;
}
阅读全文
0 0
- 【剑指offer-解题系列(58)】二叉树的下一个结点
- 剑指offer--二叉树的下一个结点
- 《剑指offer》二叉树的下一个结点
- 《剑指offer》-- 二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- [剑指offer]二叉树的下一个结点
- 剑指offer-二叉树的下一个结点
- 《剑指offer》二叉树的下一个结点
- 剑指offer: 二叉树的下一个结点
- 剑指offer 二叉树的下一个结点
- 剑指offer-二叉树的下一个结点
- 【剑指offer】二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指offer--二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 会议安排
- [实训]Java中的Serializable
- rpmbuild制作rpm 包
- 阅读笔记 >需求分析——检查需求内容
- WebView 笔记
- 【剑指offer-解题系列(58)】二叉树的下一个结点
- HTTP协议的头信息详解
- 人脸对齐之SDM论文解析
- 观察Linux行为
- Kotlin-05.包和导入(package & import)
- win10+Ubantu双系统
- maven 中配置运行指定的测试文件
- 等价二叉树
- Spring MVC Maven 使用ajax传json数据