二叉树的下一个结点
来源:互联网 发布:淘宝进货来源 编辑:程序博客网 时间:2024/04/29 10:08
Again !
题目描述:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
解题思路:分三种情况,
1):该结点有右孩子,则中序遍历下一个结点就是该结点右子树中的最左子结点;
2):该结点无右孩子,且该结点是其父结点的左孩子,则中序遍历的下一个结点就是其父结点;
3):该结点无右孩子,且该结点是其父结点的右子结点,这种情况比较复杂,我们可以沿着指向父结点的指针一直向上遍历,直到找到一个是它父结点的左子结点的结点。如果这 样的结点存在,那么这个结点的父结点就是我们要找的中序遍历下一个结点。
TreeLinkNode* GetNext(TreeLinkNode* pNode) { //分三种情况讨论 if(pNode==NULL) return pNode; TreeLinkNode* target=NULL; TreeLinkNode* nextP=NULL; //有右孩子 if(pNode->right!=NULL) { nextP=pNode->right; while(nextP->left != NULL) nextP=nextP->left; target=nextP; } else if(pNode->next!=NULL) //没有右孩子; 首先要判断父结点要存在呀!!!! { TreeLinkNode* parentNode=pNode->next; TreeLinkNode* currNode=pNode; while(parentNode!=NULL && parentNode->left!=currNode) { currNode=parentNode; parentNode=parentNode->next; } target=parentNode; /* if(pNode->next->left==pNode)//没有右孩子,且是父结点的左孩子结点 target=pNode->next; else // 没有左孩子,且是父结点的右孩子结点 { while(pNode->next->next!=NULL && pNode->next!=pNode->next->next->left) pNode=pNode->next; if(pNode->next->next==NULL) target=NULL; else target=pNode->next->next; }*/ } return target; }
0 0
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 剑指offer—斐波那契数列
- LintCode -- 乘积最大子序列
- Nosql数据库——redis(六)事务和持久化
- netduion Pluse 2启动需要5s以上问题解决
- HDU5491 The Next 位模拟
- 二叉树的下一个结点
- 软件测试基础
- Django基础(一)
- JavaScript高级程序设计之函数表达式之闭包之闭包与变量第7.2.1讲笔记
- opengl 版本
- Android 事件处理详解(一) —— 基于监听的事件处理 1
- 剑指offer—跳台阶
- Android Studio打包第三方库自带的so文件的其中一种方法
- UITableView设置单元格的高度的方法