剑指offer 二叉树的下一个结点
2017-12-09 20:44
363 查看
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:首先那个指向父结点的指针是next,很多人没有理解清楚,所以要中序遍历,那么首先得找到头结点,就根据提供的那个结点去找到头结点,然后就是中序遍历,可以使用一个list保存中序遍历的结果。
代码:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:首先那个指向父结点的指针是next,很多人没有理解清楚,所以要中序遍历,那么首先得找到头结点,就根据提供的那个结点去找到头结点,然后就是中序遍历,可以使用一个list保存中序遍历的结果。
代码:
/* 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: void mid_through(TreeLinkNode* pHead) { if(pHead==nullptr) return; mid_through(pHead->left); list_node.push_back(pHead); mid_through(pHead->right); } TreeLinkNode* GetNext(TreeLinkNode* pNode) { if(pNode==nullptr) return nullptr; TreeLinkNode *p = pNode; while(p->next!=nullptr) p = p->next; mid_through(p); list<TreeLinkNode*>::iterator iter = list_node.begin(); while(iter!=list_node.end()) { TreeLinkNode *it = *iter; if(it==pNode) break; iter++; } //return *(iter); if(iter==list_node.end()||(++iter)==list_node.end()) return nullptr; else return *iter; } private: list<TreeLinkNode*>list_node; };
相关文章推荐
- 剑指offer:二叉树的下一个结点
- 剑指offer-二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指 offer 二叉树的下一个结点 @python
- 剑指Offer——二叉树的下一个结点
- [剑指offer]面试题58:二叉树中的下一个结点
- 剑指offer--二叉树的下一个结点
- 剑指offer—二叉树的下一个结点
- 剑指offer-二叉树的下一个结点
- 【剑指Offer】面试题58:二叉树的下一个结点
- 剑指offer--(18)二叉树的下一个结点--Java描述
- 剑指offer(C++)——二叉树的下一个结点
- 剑指offer(54)-二叉树的下一个结点
- 剑指offer面试题[58]-二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指offer——面试题58:二叉树的下一个结点
- 剑指offer--二叉树的下一个结点
- 剑指Offer_57_二叉树的下一个结点
- 剑指offer——面试题58:二叉树的下一个结点
- 【剑指offer】数据结构 —— 二叉树的下一个结点(C++)