struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {
if(root->val>p->val&&root->val<q->val)
return root;
//若p结点的值<q结点的值,而根节点的值位于两者之间,说明是最近公共祖先
else if(root->val<p->val&&root->val>q->val)
return root;
//若p结点的值>q结点的值,而根节点的值位于两者之间,说明是最近公共祖先
else if(root->val==p->val||root->val==q->val)
return root;
//如果先遍历到其中一个结点,说明另一个结点是该结点的子树,直接返回
else if(root->val>p->val&&root->val>q->val)
return lowestCommonAncestor(root->left,p,q);
//如果根节点的值比两个结点的值都大,说明两个结点都在根节点的左子树,则向左子树递归
else
return lowestCommonAncestor(root->right,p,q);
//如果根节点的值比两个结点的值都小,说明两个结点都在根节点的右子树,则向右子树递归
}
Leetcode第235题二叉搜索树的最近公共祖先|C语言
最新推荐文章于 2023-10-21 11:44:48 发布