二叉树中序遍历的下一个节点
2016-06-06 14:17
246 查看
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:1.如果一个节点有右子树,那么中序遍历的下个节点就是它的右子树中最左子结点。
2.如果一个节点没有右子树,且它是它父节点的左子结点,那么中序遍历的下个节点就是它的父节点。
3.如果一个节点没有右子树,且它是父节点的右子结点,则沿着指向父节点的指针一直向上遍历,直到找到一个是它父节点的左子结点的节点。如果这个节点存在,则它的父节点是我们要找的节点。
代码:
思路:1.如果一个节点有右子树,那么中序遍历的下个节点就是它的右子树中最左子结点。
2.如果一个节点没有右子树,且它是它父节点的左子结点,那么中序遍历的下个节点就是它的父节点。
3.如果一个节点没有右子树,且它是父节点的右子结点,则沿着指向父节点的指针一直向上遍历,直到找到一个是它父节点的左子结点的节点。如果这个节点存在,则它的父节点是我们要找的节点。
代码:
struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next; TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) { } }; TreeLinkNode* GetNext(TreeLinkNode* pNode) { if(pNode == NULL) return NULL; TreeLinkNode *pNext = NULL; if(pNode->right != NULL){ TreeLinkNode *pright = pNode->right; while(pright->left != NULL) pright = pright->left; pNext = pright; } else if(pNode->next != NULL){ TreeLinkNode *pcurrent = pNode, *pparent = pNode->next; while(pparent != NULL && pcurrent == pparent->right){ pcurrent = pparent; pparent = pparent->next; } pNext = pparent; } return pNext; }
相关文章推荐
- SQL 各种锁等待类型 wait type--sys.dm_os_wait_stats 表
- 页眉中的导航如何写
- Sql2008调试问题
- Python爬虫实战(1):爬取Drupal论坛帖子列表
- 数字证书原理[推荐]
- Android 手机root
- C#调用百度地图API
- EntityFramework系列:SQLite.CodeFirst自动生成数据库
- sql 存储过程
- iOS开发多线程篇—NSOperation简单介绍
- 拓扑排序算法实现可运行
- STM32 IAP程序升级
- PBOC/EMV之TLV编码与解码
- spring mvc中jsp不能访问的原因
- How to Build an High Availability MQTT Cluster for the Internet of Things
- PHP7.0与Apache相应配置
- 如何用segment实现选择栏
- 消息队列(Message Queue)简介及其使用
- JAVA集合中的迭代器的遍历
- Android: failed to convert @drawable/picture into a drawable