【剑指offer】数据结构 —— 二叉树的下一个结点(C++)
2018-04-01 13:24
405 查看
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路讲解
考虑到中序遍历中,结点的相对顺序是左根右,所以,一个结点中序遍历顺序的下一个结点, 先顺着右结点找,没有就顺着根结点往上找
第一种:结点p存在右结点,那么下一个结点就是p的右结点的最左子节点
第二种:结点p不存在右结点,那么下一个结点就是p的根节点序列中,第一个使得p在其左分支内的(从左根右的顺序理解)
代码实现(牛客网版本)
拓展引申
此题考查的是中序遍历的顺序
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路讲解
考虑到中序遍历中,结点的相对顺序是左根右,所以,一个结点中序遍历顺序的下一个结点, 先顺着右结点找,没有就顺着根结点往上找
第一种:结点p存在右结点,那么下一个结点就是p的右结点的最左子节点
第二种:结点p不存在右结点,那么下一个结点就是p的根节点序列中,第一个使得p在其左分支内的(从左根右的顺序理解)
代码实现(牛客网版本)
/* 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* p = pNode -> right; while(p -> left != NULL) p = p -> left; return p; } //第二种情况,找根序列中,第一个p在其左分支中的 else{ TreeLinkNode* p = pNode; while(p -> next != NULL && p -> next ->left != p) p = p -> next; return p -> next; } } };
拓展引申
此题考查的是中序遍历的顺序
相关文章推荐
- 剑指offer(C++)——二叉树的下一个结点
- 【剑指Offer学习】【面试题58:二叉树的下一个结点】
- 剑指offer:二叉树的下一个结点
- 【剑指offer】数据结构 ——从上往下打印二叉树
- 剑指 offer 二叉树的下一个结点 @python
- 剑指offer52--找到二叉树下一个结点
- 剑指offer—二叉树的下一个结点
- 剑指offer——面试题58:二叉树的下一个结点
- 剑指offer(54)-二叉树的下一个结点
- 剑指offer--面试题8:二叉树的下一个结点
- 剑指offer-二叉树的下一个结点
- 【剑指offer】数据结构 ——栈的压入、弹出序列(C++)
- 剑指offer-二叉树的下一个结点
- 剑指offer面试题[58]-二叉树的下一个结点
- 剑指offer 二叉树的下一个结点
- #数据结构与算法学习笔记#剑指Offer1.5:二维数组中的查找(C++)
- 剑指offer--数据结构之二叉树(1、4、6、11、12、27、48、50、60)
- 剑指Offer_57_二叉树的下一个结点
- 剑指offer--(18)二叉树的下一个结点--Java描述
- 数据结构 - 求二叉树中结点的最大距离(C++)