大一下半期数据结构

二叉搜索树中的最近公共祖先

在一棵树T中两个结点uv的最近公共祖先(LCA),是树中以uv为其后代的深度最大的那个结点。现给定某二叉搜索树(BST)中任意两个结点,要求你找出它们的最近公共祖先。

函数接口定义:

int LCA( Tree T, int u, int v );

其中Tree的定义如下:

typedef struct TreeNode *Tree;
struct TreeNode {int   Key;Tree  Left;Tree  Right;
};

函数LCA须返回树T中两个结点uv的最近公共祖先结点的键值。若uv不在树中,则应返回ERROR

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>#define ERROR -1
typedef struct TreeNode *Tree;
struct TreeNode {int   Key;Tree  Left;Tree  Right;
};Tree BuildTree(); /* 细节在此不表 */
int LCA( Tree T,  int u, int v );int main()
{Tree T;int u, v, ans;T = BuildTree();scanf("%d %d", &u, &v);ans = LCA(T, u, v);if ( ans == ERROR ) printf("Wrong input\n");else printf("LCA = %d\n", ans);return 0;
}/* 你的代码将被嵌在这里 */

题目解答:

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

6-3 二叉搜索树中的最近公共祖先 (25 分)相关推荐

  1. 二叉树的最近公共祖先、二叉搜索数的最近公共祖先

    目录 二叉树的最近公共祖先 二叉搜索数的最近公共祖先 二叉树的最近公共祖先Ⅱ 二叉树的最近公共祖先Ⅲ 二叉树的最近公共祖先Ⅳ 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖 ...

  2. [力扣] 501. 二叉搜索树中的众数

    501 二叉搜索树中的众数 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 例如: 给定 BST [1,null,2,2], 返回[2]. 提示:如果众数超 ...

  3. leetcode 450. 删除二叉搜索树中的节点 c语言实现

    如题: 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可 ...

  4. 70. Leetcode 701. 二叉搜索树中的插入操作 (二叉搜索树-基本操作类)

    给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树. 返回插入后二叉搜索树的根节点. 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同.注意,可能 ...

  5. 67. Leetcode 450. 删除二叉搜索树中的节点 (二叉搜索树-基本操作类)

    给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用.一般来说,删除节点可分为两个步 ...

  6. 450. 删除二叉搜索树中的节点

    给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可分为两个 ...

  7. 【数据结构与算法】之深入解析“二叉搜索树中的插入操作”的求解思路与算法示例

    一.题目要求 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value,将值插入二叉搜索树,返回插入后二叉搜索树的根节点,输入数据保证,新值和原始二叉搜索树中的任意节点值都不同. 注意 ...

  8. 【数据结构与算法】之深入解析“删除二叉搜索树中的节点”的求解思路与算法示例

    一.题目要求 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变,返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除 ...

  9. LeetCode Algorithm 剑指 Offer II 056. 二叉搜索树中两个节点之和

    剑指 Offer II 056. 二叉搜索树中两个节点之和 Ideas 这题有点类似一个组合题,首先是通过二叉树遍历得到一个序列,然后再通过LeetCode Algorithm 1. 两数之和的方法查 ...

最新文章

  1. 叫你一声“孙悟空”,敢答应么?
  2. ASP.NET页面借助IFrame提交表单数据所遇到的问题
  3. 九、Redis五大数据类型之一String
  4. LRU的理解与Java实现
  5. SpringBootAdmin客户端接入
  6. Vscode多个窗口显示多个选项卡/Tabs
  7. 心电图数据结构化标准_自己实现一个类 JSON 数据结构
  8. 手动修改Sublime Text2 边栏Sidebar的样式
  9. 各个版本的ArcGis集合下载
  10. Lync Server 2013 实战系列之七:标准版-测试内部登陆
  11. 从一篇防范钓鱼邮件的通知说起
  12. 【最后一天报名】数据科学峰会分论坛:供应链、用户增长、电商零售
  13. 安装系统跳过创建用户,直接以超级管理员身份进入系统
  14. 蓝桥杯试题 算法提高 学霸的迷宫
  15. 2021哈工大深入理解计算机系统Lab5(linklab)
  16. Systemverilog中的logic和bit
  17. 关于QQ pc端登录界面的测试用例 11——28
  18. “小而美”企业的战略规划思路解读
  19. JS基础-字符串拆分、截取、查找汇总
  20. 有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?

热门文章

  1. javascript-从toString方法在判断复杂数据类型上的妙用,引申到对原型链的理解...
  2. Java开发设计——UML类图
  3. 程序员面试金典——2.7回文链表
  4. 【Leetcode 795】Number of Subarrays with Bounded Maximum
  5. 总结几个等价无穷小相关的关系运算
  6. 再谈关于IP数据报分片
  7. python中深浅复制的问题
  8. 笔记本无线网通过网线共享给其他主机
  9. JS Location
  10. 2 Django-2的路由层(URLconf)