最低的共同祖先解释二叉搜索树的代码

时间:2016-03-13 18:55:51

标签: c++ algorithm

我在这里遇到了这个问题,我希望有人解释这个问题,我无法弄明白。

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;
}

1 个答案:

答案 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中)