6-3 二叉搜索树中的最近公共祖先 (25 分)
大一下半期数据结构
二叉搜索树中的最近公共祖先
在一棵树T
中两个结点u
和v
的最近公共祖先(LCA),是树中以u
和v
为其后代的深度最大的那个结点。现给定某二叉搜索树(BST)中任意两个结点,要求你找出它们的最近公共祖先。
函数接口定义:
int LCA( Tree T, int u, int v );
其中Tree
的定义如下:
typedef struct TreeNode *Tree;
struct TreeNode {int Key;Tree Left;Tree Right;
};
函数LCA
须返回树T
中两个结点u
和v
的最近公共祖先结点的键值。若u
或v
不在树中,则应返回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 分)相关推荐
- 二叉树的最近公共祖先、二叉搜索数的最近公共祖先
目录 二叉树的最近公共祖先 二叉搜索数的最近公共祖先 二叉树的最近公共祖先Ⅱ 二叉树的最近公共祖先Ⅲ 二叉树的最近公共祖先Ⅳ 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖 ...
- [力扣] 501. 二叉搜索树中的众数
501 二叉搜索树中的众数 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 例如: 给定 BST [1,null,2,2], 返回[2]. 提示:如果众数超 ...
- leetcode 450. 删除二叉搜索树中的节点 c语言实现
如题: 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可 ...
- 70. Leetcode 701. 二叉搜索树中的插入操作 (二叉搜索树-基本操作类)
给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树. 返回插入后二叉搜索树的根节点. 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同.注意,可能 ...
- 67. Leetcode 450. 删除二叉搜索树中的节点 (二叉搜索树-基本操作类)
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用.一般来说,删除节点可分为两个步 ...
- 450. 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可分为两个 ...
- 【数据结构与算法】之深入解析“二叉搜索树中的插入操作”的求解思路与算法示例
一.题目要求 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value,将值插入二叉搜索树,返回插入后二叉搜索树的根节点,输入数据保证,新值和原始二叉搜索树中的任意节点值都不同. 注意 ...
- 【数据结构与算法】之深入解析“删除二叉搜索树中的节点”的求解思路与算法示例
一.题目要求 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变,返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除 ...
- LeetCode Algorithm 剑指 Offer II 056. 二叉搜索树中两个节点之和
剑指 Offer II 056. 二叉搜索树中两个节点之和 Ideas 这题有点类似一个组合题,首先是通过二叉树遍历得到一个序列,然后再通过LeetCode Algorithm 1. 两数之和的方法查 ...
最新文章
- 叫你一声“孙悟空”,敢答应么?
- ASP.NET页面借助IFrame提交表单数据所遇到的问题
- 九、Redis五大数据类型之一String
- LRU的理解与Java实现
- SpringBootAdmin客户端接入
- Vscode多个窗口显示多个选项卡/Tabs
- 心电图数据结构化标准_自己实现一个类 JSON 数据结构
- 手动修改Sublime Text2 边栏Sidebar的样式
- 各个版本的ArcGis集合下载
- Lync Server 2013 实战系列之七:标准版-测试内部登陆
- 从一篇防范钓鱼邮件的通知说起
- 【最后一天报名】数据科学峰会分论坛:供应链、用户增长、电商零售
- 安装系统跳过创建用户,直接以超级管理员身份进入系统
- 蓝桥杯试题 算法提高 学霸的迷宫
- 2021哈工大深入理解计算机系统Lab5(linklab)
- Systemverilog中的logic和bit
- 关于QQ pc端登录界面的测试用例 11——28
- “小而美”企业的战略规划思路解读
- JS基础-字符串拆分、截取、查找汇总
- 有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?