PTA 6-31 二叉搜索树中的最近公共祖先

文章描述了一个在二叉搜索树中查找特定值u和v是否存在以及计算它们的最低公共祖先(LCA)的递归方法。通过比较节点值和u/v的关系,确定在左子树、右子树或直接返回结果。
摘要由CSDN通过智能技术生成

int Find_Key(Tree T, int val) {
    if (T == NULL) return 0;
    while (T) {
        if (val == T->Key) return 1;
        else {
            if (val < T->Key) T = T->Left;
            else T = T->Right;
        }
    }
    return 0;
}

int LCA(Tree T, int u, int v) {
    if (!Find_Key(T, u) || !Find_Key(T, v)) {
        return ERROR;
    }
    if(u==T->Key||v==T->Key) return T->Key;
    if (u < v) {
        if (u<T->Key && v>T->Key) return T->Key;
        else if (u < T->Key && v < T->Key) return LCA(T->Left, u, v);
        else if (u > T->Key && v > T->Key) return LCA(T->Right, u, v);
    }
    else {
        if (v<T->Key && u>T->Key) return T->Key;
        else if (v < T->Key && u < T->Key) return LCA(T->Left, u, v);
        else if (v > T->Key && u > T->Key) return LCA(T->Right, u, v);
    }
    return ERROR;
}

1.需要一个在二叉搜索树中查找该值是否存在的函数

2.采用递归来实现,1,当二叉搜索树中吗没有u和v时直接返回错误。2当u和v其中一个与根节点的值相等时,直接返回相等的那一个值。3,根据u和v的大小来分类讨论,思路是,如果u和v的值分别大于和小于根节点的值,那么他们两个的公共祖先就是根节点,如果u和v同时大于或小于根节点的值,那么去他们的左或右子树上去寻找公共祖先,由此进行递归。

3.递归思路是先根据第一层即根节点的情况来设立递归的出口,接着假设函数成立来解决k层的问题(即函数本身剩下要解决的问题)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值