这题不会
后继就是当前节点在中序遍历序列中的下一个节点
//解题重点是分情况讨论
//1.如果是有右儿子的,则右儿子的左节点就是答案
//2.如果没有右子树的情况,就顺着这个点往上找,直到找到该点是某个节点的左子树为止
//3.其他情况为没有后继
class Solution {
public:
TreeNode* inorderSuccessor(TreeNode* p) {
if(p->right){//情况1.如果子树有右儿子
p=p->right;//则p=右儿子
while(p->left) p=p->left;//如果右儿子有左节点,则让p=左节点
return p;//返回左节点
}
while(p->father && p==p->father ->right) p=p->father;//当前节点有父节点并且当前节点是父节点的右儿子,直到找到当前节点不是父节点的
//右儿子为止或者当前节点没有父节点了,终止循环,此时当前节点的后继就是父节点
return p->father;//返回父节点
}
};