题目
设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。
如果指定节点没有对应的“下一个”节点,则返回null
。
思路
对于一个节点考虑两种情况:
1. 指定节点大于等于本节点,那要找的一定在右子树。
2. 指定节点比本节点小,要找的节点在左子树或者是本节点。
代码
TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {
if(!root||!p)
return nullptr;
if(p->val>=root->val)
return inorderSuccessor(root->right, p);
else
{
TreeNode *l=inorderSuccessor(root->left, p);
return l?l:root;
}
}