您的位置:首页 > 其它

给定一个二叉树和其中的一个节点,求中序遍历这个节点的下一个节点

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐