剑指Offer——二叉树的下一个结点
2017-11-03 11:38
337 查看
题目描述:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
分析:
如果该结点存在右子树,那么返回右子树的最左结点。
如果该结点不存在右子树,那么如果该结点不是其父结点的最右结点,那么返回父结点;
否则一直找到最大子树的最右结点是该结点,那么返回该最大子树的根结点的父结点。
代码:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
分析:
如果该结点存在右子树,那么返回右子树的最左结点。
如果该结点不存在右子树,那么如果该结点不是其父结点的最右结点,那么返回父结点;
否则一直找到最大子树的最右结点是该结点,那么返回该最大子树的根结点的父结点。
代码:
1 /* 2 struct TreeLinkNode { 3 int val; 4 struct TreeLinkNode *left; 5 struct TreeLinkNode *right; 6 struct TreeLinkNode *next; 7 TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) { 8 9 } 10 }; 11 */ 12 class Solution { 13 public: 14 TreeLinkNode* GetNext(TreeLinkNode* pNode) { 15 if(pNode->right == NULL) { 16 if(pNode->next == NULL) return NULL; 17 TreeLinkNode* p1 = pNode; 18 TreeLinkNode* p2 = pNode->next; 19 while(p2 && p2->right == p1) { 20 p1 = p1->next; 21 p2 = p1->next; 22 } 23 if(p2) return p2; 24 return NULL; 25 } 26 TreeLinkNode* nextNode = pNode->right; 27 while(nextNode->left) { 28 nextNode = nextNode->left; 29 } 30 return nextNode; 31 } 32 };
相关文章推荐
- 【剑指Offer学习】【面试题58:二叉树的下一个结点】
- 剑指offer——面试题58:二叉树的下一个结点
- 【剑指offer】数据结构 —— 二叉树的下一个结点(C++)
- 剑指offer 二叉树的下一个结点
- 剑指offer: 二叉树的下一个结点
- 剑指offer-57.二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指offer(54)-二叉树的下一个结点
- 剑指offer-二叉树的下一个结点
- 剑指offer--面试题8:二叉树的下一个结点
- 剑指offer 面试题58 二叉树的下一个结点
- 【剑指offer】二叉树的下一个结点
- 【剑指offer】第八题(二叉树的下一个结点) 和 第九题(用两个栈实现队列)
- 剑指offer--二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指offer-二叉树的下一个结点
- 剑指offer(C++)——二叉树的下一个结点
- [剑指offer]面试题58:二叉树中的下一个结点
- 剑指 offer 二叉树的下一个结点 @python