二叉树查找最大最小值c语言,用C语言实现二叉排序树查找小于关键字key的最大节点的函数...
今天有点时间, 根据我下面的想法写了代码.
node_t*
find(node_t* t, int k)
{
if(t == NULL)
return NULL;
/* t1 is used to record the parent of the last node
* which is right child of its parent
*/
t1 = NULL;
do{
if(k < t->v)
t = t->l;
else if(k = t->v)
break;
else{
t1 = t;
t = t->r;
}
}while(t != NULL);
if(t == NULL || t->l == NULL)
return t1;
/* max(t->l) */
t = t->l;
while(t->r != NULL)
t = t->r;
return t;
}
以前的答案
遍历的话, 时间复杂度O(n). 这里有O(lgn)的方法.
就是求 bst的 某节点的 前驱.查询bst, 如果找到 key的节点, 查此节点的前驱; 否则, 可以知道此key 应该插入的节点位置, 查此位置的前驱.
求bst节点 n的 前驱:
如果左子树不为null, 则前驱为 max(n->left);
否则, 递归n的 父节点p; 如果p为根节点, 则前驱为 根节点;
否则, 如果p为其父节点的右节点, 则前驱为 p;
否则, p = p->p; 重复step2-4.
如果bst节点是有父节点信息的. 很简单:
node_t*
max(node_t* r)
{
while(r->r != NULL)
r = r->r;
return r;
}
node_t*
predecessor(node_t* r)
{
if(r->l != NULL)
return max(r->l);
node_t *p = r->p;
while(p != NULL && r != p->r){
r = p;
p = p->p;
}
return p;
}
这里时间O(lgn).
没有父节点信息, 则需要辅助内存. 这里可以用一个 辅助栈 把bst查询 的路径节点都记录下来, 然后就可以 像上述算法一样, 递归查询节点的 父节点了. 时间O(lgn), 空间O(lgn).
当然我们还可以在bst查询时, 记录下其 路径上的 最后一个 "为其父节点的右节点的节点", 这样时间O(lgn), 空间O(1).
二叉树查找最大最小值c语言,用C语言实现二叉排序树查找小于关键字key的最大节点的函数...相关推荐
- 《数据结构(C语言版)》学习笔记08 查找
目录 写在前面 一.顺序查找 1.1 普通的无序查找方法 1.2 改进的无序查找--哨兵 1.3 有序的顺序查找 二.折半查找/二分查找 三.分块查找 四.二叉搜索树 五.平衡二叉搜索树 六.B树 七 ...
- 平衡查找树C语言程序,C语言数据结构之平衡二叉树(AVL树)实现方法示例
本文实例讲述了C语言数据结构之平衡二叉树(AVL树)实现方法.分享给大家供大家参考,具体如下: AVL树是每个结点的左子树和右子树的高度最多差1的二叉查找树. 要维持这个树,必须在插入和删除的时候都检 ...
- vector 查找最大最小值,且求最大值或者最小值在容器中的位置
文章目录 前言 一 vector 查找最大最小值,及其位置 前言 在项目中经常会用到对vector容器中的数据求最大值或者最小值,这里简单总结下vector的常用方法,方便后续快速查找回顾. 一 ve ...
- c语言链表查找的代码与题目,链表的C语言实现之单链表的查找运算_c语言
建立了一个单链表之后,如果要进行一些如插入.删除等操作该怎么办?所以还须掌握一些单链表的基本算法,来实现这些操作.单链表的基本运算包括:查找.插入和删除.下面我们就一一介绍这三种基本运算的算法,并结合 ...
- mysql查找最大值最小值_查找两个8位数字的最大值| 8086微处理器
mysql查找最大值最小值 Problem statement: 问题陈述: To find maximum of two 8-bit numbers using 8086 Microprocesso ...
- C语言二叉树实验报告流程图,二叉树的建立与遍历实验报告(c语言编写,附源代码).doc...
二叉树的建立与遍历实验报告(c语言编写,附源代码).doc 第 1 页,共 9 页二叉树的建立与遍历实验报告级 班 年 月 日 姓名 学号_ 1实验题目建立一棵二叉树,并对其进行遍历(先序.中序.后序 ...
- (46)System Verilog数组查找最大最小值
(46)System Verilog数组查找最大最小值 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog数组查找最大最小值 5)结语 1 ...
- java递归方法建立搜索二叉树,具备查找关键字,插入新节点功能
二叉排序树的定义: 二叉排序树满足以下三个性质(BST性质): <1>若它的左子树非空,则左子树上所有节点的值均小于根节点的值 <2>若它的右子树非空,则右子树上所有节点的值均 ...
- c语言统计二维数组中数字出现次数,C语言二维数组中的查找的实例
C语言二维数组中的查找的实例 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
最新文章
- UA MATH567 高维统计IV Lipschitz组合8 随机投影与John-Lindenstrauss引理
- 盘点最经典的外包案例
- 热插拔服务器电源维修,无需关停系统即可热插拔,TE Connectivity推出滑轨电源连接器...
- webstorm配置,快捷键console.log,中文字体,快捷键配置等
- 茶颜只有“霸蛮”,没有悦色
- opencv-api matchTemplate
- ROS学习笔记八:创建ROS msg和srv
- aspnet_regsql.exe 工具参数解析
- 【Java与智能设备】 CH05_2 Intent启动内置程序
- 网站编辑,你们的名字叫搬运工?
- 洛谷 P1878 舞蹈课(优先队列 + 双链表)
- 细菌感染和抗生素使用
- 新浪微博开发平台接入流程(1)---注册应用
- mysql使得df和du不一致_df和du显示的磁盘空间使用情况不一致的原因及处理
- 滤波器原理及其作用计算机网络,什么是滤波器?滤波器原理及其作用是什么?...
- 学计算机进富士康,大学生进富士康上班工资多高,有发展前景吗?看看前辈们怎么说...
- 续写千倍币神话,PlusFo到底是何方神圣?
- 金融行业需要什么样的数据库?
- ORACLE修改字段长度!
- java 案例:二月天;求月一共有多少天
热门文章
- 基于JAVA+SpringMVC+MYSQL的鲜花销售平台
- 【链接】Eclipse中快速打开文件所在的文件夹位置
- 游戏开发中常用的设计模式
- 模糊查询时,页面没有数据,数据库编辑器里可以正常显示数据
- 70个经典的 Shell 脚本面试问题
- OS开发UI篇—Quartz2D使用(截屏)
- iOS开发隐藏tabBar的问题
- [outlook]打开以后就自动进入安全模式的解决方法。Outlook start in safe mode.
- 知道一点怎么设直线方程_直线初步
- 记事本可以编辑html语言吗,笔记本win7系统使用记事本编辑和运行html代码的方法...