《剑指offer》二叉树的下一个结点
来源:互联网 发布:网球比赛直播软件 编辑:程序博客网 时间:2024/05/01 06:49
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
解法:
1.只有两种情况:1)该结点有右子树,那么下一个结点就是该右子树里面最左的那个结点。描述语言为if(pNode->right != NULL) pRight = pNode->right; while(pRight->left != NULL) {pRight = pRight->left;} pNext = pRight; 2)该结点没有右子树,那么就只要判定它的根结点是否为根的根结点的左子树即可,一直寻找到这样存在的点。描述语言为if(pNode->next != NULL)while(pPre != NULL && current->next == pPre->right) {current = pPre; pPre = pPre->next;} pNext = pPre;
2.总结,这道题应该不算难的,只要分类搞清楚两种情况的判定方法,即可以做出来。
using namespace std;/*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) { if(pNode == NULL) return NULL; //结点的右子树存在 TreeLinkNode* pRight; TreeLinkNode* pNext = NULL; if(pNode->right != NULL) { //下一个结点为右子树中最左的结点 pRight = pNode->right; while(pRight->left != NULL) { pRight = pRight->left; } pNext = pRight; } //结点的右子树不存在,那么就继续向父结点搜索 else if(pNode->next != NULL) { TreeLinkNode* current; TreeLinkNode* pPre; current = pNode; pPre = pNode->next; while(pPre != NULL && current == pPre->right) { current = pPre; pPre = pPre->next; } pNext = pPre; } return pNext; }};
0 0
- 剑指offer--二叉树的下一个结点
- 《剑指offer》二叉树的下一个结点
- 《剑指offer》-- 二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- [剑指offer]二叉树的下一个结点
- 剑指offer-二叉树的下一个结点
- 《剑指offer》二叉树的下一个结点
- 剑指offer: 二叉树的下一个结点
- 剑指offer 二叉树的下一个结点
- 剑指offer-二叉树的下一个结点
- 【剑指offer】二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指offer--二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指offer 二叉树的下一个结点
- 对话框(Dialog):
- 腾讯面试题——返回一个数二进制序列中1的个数
- 大圣归来!
- keepalived 的安装和配置使用(精华版)
- redis要怎么加锁啊
- 《剑指offer》二叉树的下一个结点
- javascript犀牛书学习笔记(一)函数
- yii CDbCriteria详细说明
- matlab的limsvm配置
- 事件处理:
- 搞定angular1.x——自定义指令
- 同源策略 及 jsonp
- 面试题集锦
- java基础50题(1)