二叉树的下一个节点
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
解题思路
- 二叉树的中序遍历的下一个节点
- 如果存在右子树,那么下一个节点就是右子树中的最深的左子树
- 如果不存在右子树,就要回到父节点中。如果是父节点的左子树,那么就是下一个节点,否则,继续向父节点回退。
class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if(pNode == NULL) return NULL;
TreeLinkNode *pNext=NULL;
if(pNode->right!=NULL){
pNext = pNode->right;
while(pNext->left != NULL)
pNext = pNext->left;
return pNext;
}
while(pNode ->next !=NULL){
if(pNode->next->left==pNode){
return pNode->next;
}
pNode = pNode->next;
}
return pNext;
}
};
本文介绍了一种算法,用于找到给定二叉树中任一节点的中序遍历顺序下的下一个节点。如果当前节点有右子树,则下一个节点为右子树中最左边的节点;若无右子树,需回溯到父节点,直到找到当前节点为其父节点左子树的情况。

被折叠的 条评论
为什么被折叠?



