我在这里遇到了这个问题,我希望有人解释这个问题,我无法弄明白。
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
while(root != NULL) {
if (p->val < root->val && q->val < root->val) {
root = root->left;
} else if (p->val > root->val && q->val > root->val) {
root = root->right;
} else {
return root;
}
}
return root;
}
答案 0 :(得分:0)
二分查找树中p和q的LCA是距离根最远的p和q的共享祖先。
你的代码所做的是,你正在从上到下遍历,它遇到的第一个节点是p和q之间的值,即p&lt; n&lt; q或与p或q中的一个相同,是p和q的LCA(假设p 因此,只是递归地遍历BST,如果节点的值大于p和q,则我们的LCA位于节点的左侧,如果它小于p和q,则LCA位于右侧。否则root是LCA(假设b和p都存在于BST中)