二叉树中序遍历的下一个节点
2017-04-22 23:41
218 查看
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针next。
分两种情况:
1. 该节点存在右子节点,则下一个节点是右子树的最左节点。
2. 该节点不存在右子节点,则下一个节点是该节点的第一个父子关系为左的祖先节点中的父节点, 因为如果遍历的节点是父节点的右节点说明父节点已遍历过了
题解
如果没有给出父节点可能真要中序遍历一次了,但既然给出了就不必那么麻烦了。分两种情况:
1. 该节点存在右子节点,则下一个节点是右子树的最左节点。
2. 该节点不存在右子节点,则下一个节点是该节点的第一个父子关系为左的祖先节点中的父节点, 因为如果遍历的节点是父节点的右节点说明父节点已遍历过了
/* 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) return pNode; //不存在右节点,找第一个父子关系为左的祖先节点中的父节点 if(pNode->right == NULL){ //是父节点的右节点说明父节点遍历过了 while(pNode && pNode->next && pNode == pNode->next->right) pNode = pNode->next; return pNode->next; } //存在右节点,找其最左 pNode = pNode->right; while(pNode && pNode->left) pNode = pNode->left; return pNode; } };
相关文章推荐
- 剑指offer:找到二叉树中序遍历的下一个节点
- 二叉树中序遍历的下一个节点
- 找出二叉树中序遍历的所求节点的下一个节点
- 树——二叉树中序遍历的下一个节点
- 【剑指offer】面试题 8:二叉树的下一个节点
- 操作链表,需要记住保存前一个结点,以及记录下一个节点,否则容易进入死循环,或者数据出错。
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
- 为什么指向的是最后一个节点的下一个节点 http://www.zhihu.com/question/20638791
- activiti5.22获取下一个流程节点
- 二叉树的下一个节点
- python 重建二叉树与二叉树下一个节点
- 找二叉树中指定节点在中序遍历中的下一个节点
- Flex tree 模糊查询节点,重复节点再次查询自动下一个
- 寻找中序遍历下一个节点
- 找出BST上任意节点的下一个节点
- Winform TreeView 查找下一个节点
- 剑指offer--二叉树的下一个节点
- 二叉树的下一个节点
- 二叉树的下一个节点
- 剑指offer系列之56:二叉树的下一个节点