题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
样例
假定二叉树是:[2, 1, 3, null, null, null, null], 给出的是值等于2的节点。
则应返回值等于3的节点。
解释:该二叉树的结构如下,2的后继节点是3。
2
/
1 3
1、这到题目的核心是分情况讨论1当前节点有右子树 2当前节点没有右子树
2、后继节点的概念是该节点在中序遍历中下一个节点
class Solution {
public:
TreeNode* inorderSuccessor(TreeNode* p) {
if(p->right)
{
p=p->right;
while(p->left) p=p->left;
return p;
}
while(p->father&&p==p->father->right) p=p->father;
return p->father;//注意这里返回的是父结点
}
};