在二叉树中找到一个节点的后继节点
Posted 但见光阴流似箭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在二叉树中找到一个节点的后继节点相关的知识,希望对你有一定的参考价值。
题目思路
题目来源C++代码实现
/*
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 pNode;
}
if(pNode->right != NULL)
{
//后继节点就是右子树上最左的节点
//找到后可提前返回
return GetLeftMost(pNode->right);
}
else
{
//通过x找到父节点p,若x是p的左子树,则x的后继节点为p,若x是p的右子树,则继续向上找
TreeLinkNode* parent = pNode->next;
while(pNode != parent->left && parent != NULL)
{
parent = parent->next;
pNode = pNode->next;
}
return parent;
}
}
private:
TreeLinkNode* GetLeftMost(TreeLinkNode* pNode)
{
while(pNode->left != NULL)
{
pNode = pNode->left;
}
return pNode;
}
};
以上是关于在二叉树中找到一个节点的后继节点的主要内容,如果未能解决你的问题,请参考以下文章