

Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”
Given binary search tree: root = [6,2,8,0,4,7,9,null,null,3,5]
_______6______
/ \
___2__ ___8__
/ \ / \
0 _4 7 9
/ \
3 5
Example 1:
Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8 Output: 6 Explanation: The LCA of nodes2and8is6.
Example 2:
Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4 Output: 2 Explanation: The LCA of nodes2and4is2, since a node can be a descendant of itself according to the LCA definition.
Note:
- All of the nodes' values will be unique.
- p and q are different and both values will exist in the BST.
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
/*//非递归,因为有while循环,所以用的时间比较多
TreeNode *curNode = root;
while(1){
if(curNode->val > p->val && curNode->val > q->val)
curNode = curNode->left;
else if(curNode->val < p->val && curNode->val < q->val)
curNode = curNode->right;
else
return curNode;
}*/
//递归,效率高
if (root->val > p->val && root->val > q->val)
return lowestCommonAncestor(root->left, p, q);
else if (root->val < p->val && root->val < q->val)
return lowestCommonAncestor(root->right, p, q);
else return root;
}
};
本文探讨了在二叉搜索树中查找两个指定节点的最低公共祖先(LCA)的问题,提供了两种解决方案:一种是非递归方法,通过循环进行节点比较;另一种是递归方法,效率更高。示例展示了不同输入情况下的正确输出。
240

被折叠的 条评论
为什么被折叠?



