(剑指Offer)面试题58:二叉树的下一个结点
2015-08-06 20:45
513 查看
题目:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:
考虑中序遍历的过程,如果当前结点存在右子节点,那么当前结点的下一个结点应该为该右子树的最左边的结点;
如果当前结点没有右子节点,那么如果当前结点的父结点p->parent为其父结点的父结点p->parent->patent的左子结点,那么当前结点的下一结点即为其父结点;否则继续往上遍历,直至找到一个结点为其父结点的左子结点,那么该结点即为当前结点的下一结点,如果找不到,则返回NULL;
(文字描述比较晦涩,大家可以画图看看)
在线测试OJ:
http://www.nowcoder.com/books/coding-interviews/9023a0c988684a53960365b889ceaf5e?rp=3AC代码:
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; if(pNode->right!=NULL){ TreeLinkNode* pTmp=pNode->right; while(pTmp->left!=NULL){ pTmp=pTmp->left; } return pTmp; } else{ while(pNode->next!=NULL){ if(pNode==pNode->next->left) return pNode->next; pNode=pNode->next; } return NULL; } } };
相关文章推荐
- 黑马程序员——java开发环境配置
- 怎样才是理想的程序员
- 黑马程序员---OC基础---内存管理(MRC、ARC)
- iOS面试知识点
- 2015研究僧实习面试题
- 黑马程序员 oc随机 写个关联
- 黑马程序员——Java 泛型
- 黑马程序员——Java Collection集合
- 黑马程序员---OC基础---封装、继承、多态、@property、id类型、实例变量修饰符
- 黑马程序员--Java面向对象
- 黑马程序员——java基础---Java语言中的异常
- IT职业生涯的几条建议
- 启示—地点IT高管20在职场心脏经(读书笔记6)
- 面试题1
- 码农《五》
- 《招聘一个靠谱的iOS》面试题参考答案
- 码农《四》
- 黑马程序员——字符流,字节流
- 黑马程序员————— java基础之函数与数组
- 黑马程序员 oc随记 写一个多态