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;
}
};