作为一直小白 不知道什么是后继 所以按照题目的意思模拟了一下 很好理解
C++ 代码
class Solution {
public:
vector<int> nums;
void inorder(TreeNode *p) // 中序遍历找到答案
{
if(p)
{
inorder(p->left);
nums.push_back(p->val);
inorder(p->right);
}
}
TreeNode* inorderSuccessor(TreeNode* p) {
TreeNode * pr = p; // 保存当前节点的给定值
while (p->father) p = p->father; // 遍历到头结点
inorder(p); // 中序遍历
for (int i = 0; i < nums.size(); i++)
{
if (pr->val == nums[i] && i < nums.size() - 1) // 找到定点值的下一个值
{
pr->val = nums[i + 1]; // 如果不是最后一个结点就返回pr
return pr; // 因为这个函数的返回值是树的结点类型 所以要返回pr
}
}
return NULL;
}
};