给定一个二叉树和其中的一个节点,求中序遍历这个节点的下一个节点
2017-09-28 09:48
549 查看
本题源自剑指offer
------------------------------------------------------------------------------------------------------
中序遍历的下一个节点有三种情况
1 当这个节点右子树不为空,则下一个节点为右子树的最左子节点
2 若右子树为空,且节点为父节点的左子树,则下一个节点为父节点
3 若右子树为空,且节点为父节点的右子树,则按父指针向上遍历,直到遇到节点为父指针的左孩子。
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
TreeLinkNode* pNext=NULL;
if(pNode==NULL)
return NULL;
if(pNode->right!=NULL){
TreeLinkNode* pRight=pNode->right;
while(pRight->left!=NULL)
pRight=pRight->left;
pNext=pRight;
}else{
TreeLinkNode* pParent=pNode->parent;
TreeLinkNode* pCurrent=pNode;
while(pParent!=NULL&&pCurrent==pParent->right){
pCurrent=pParent;
pParent=pParent->parent;
}
pNext=pParent;
}
return pNext;
}
------------------------------------------------------------------------------------------------------
中序遍历的下一个节点有三种情况
1 当这个节点右子树不为空,则下一个节点为右子树的最左子节点
2 若右子树为空,且节点为父节点的左子树,则下一个节点为父节点
3 若右子树为空,且节点为父节点的右子树,则按父指针向上遍历,直到遇到节点为父指针的左孩子。
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
TreeLinkNode* pNext=NULL;
if(pNode==NULL)
return NULL;
if(pNode->right!=NULL){
TreeLinkNode* pRight=pNode->right;
while(pRight->left!=NULL)
pRight=pRight->left;
pNext=pRight;
}else{
TreeLinkNode* pParent=pNode->parent;
TreeLinkNode* pCurrent=pNode;
while(pParent!=NULL&&pCurrent==pParent->right){
pCurrent=pParent;
pParent=pParent->parent;
}
pNext=pParent;
}
return pNext;
}
相关文章推荐
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回
- 二叉树 给定一个节点,求中序遍历下一个节点
- 给定一颗二叉树,以及其中的两个node(地址均非空),要求给出这两个node的一个公共父节点,使得这个父节点与两个节点的路径之和最小。
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回
- 试编写一个函数,返回一颗给定二叉树在中序遍历下的最后一个节点(分别用递归和非递归实现)
- 给你一个二叉树,其中每个节点都包含一个整数值。查找总和给定值的路径数,路径不需要在根或叶子处开始或结束,但必须向下
- 剑指offer给定二叉树,求中序遍历的下一个 节点,前序遍历,后序遍历扩展
- 有一个特殊的链表,其中每个节点不但有指向下一个节点的指针pNext,还有一个指向链表中任意节点的指针pRand,如何拷贝这个特殊链表?
- Cracking coding interview (4.5)二叉树按中序遍历次序返回某节点下一个节点
- 一个关于二叉树的创建、先序遍历、中序遍历、后序遍历、求叶子节点的完整函数的c语言完整程序。
- 给定一个单向链表,目前已经有一个指针,指向某一个节点(记作A),现在要删除这个节点A,如何操作。
- 给定一个二叉树,找到最大路径和。该路径可以在树中的任何节点处开始和结束。
- 给定一个链表,链表的每一个节点包含三个属性:1、节点值;2、指向下一个结点的引用;3、随机指向链表内任意一个节点的引用,也能不指向任何节点。复制该链表
- 《程序员面试金典》--寻找二叉树中某个节点中序遍历的下一个节点
- 51. 腾讯面试题:一个二叉树,中序遍历,找一个节点的后一个节点
- 给定一个二叉树,节点值为0-9,从根节点到叶子结点组成一个数,求二叉树所有组成的数的和
- 58 - 二叉树的中序遍历的下一个节点
- 给一个由整数构成的排序二叉树, 给定一个整数, 找到二叉树中比它大并且最近它的节点。