10.30二叉树一些性质,找公共祖先(一般与搜索树),操作的复杂度,选择题细节

news2025/1/14 18:08:33

课上

 

一些结论,性质

n0,n1,n2指的是子结点的数量,n0没有子节点,叶子结点

n=2*n2+n1+1,若n1为奇数,则n为偶数,不然,则为奇数

满二叉树

没有度为1的结点,即每个结点要么没有孩子结点,要么就有两个孩子结点

没有孩子结点的结点一定是叶子结点

回顾 

寻找二叉搜索树最近公共祖先

思路是找到从根节点到两个结点的路径,由于是一个树,所以最开始的路径是一定一样的,即在同一颗树上至少具有相同的根节点,然后一直往下走,走到最后一个分岔口,开始分叉,即路径中最后一个相同的结点时,就是最近公共祖先

始终保持最近的相同结点,可以在退出时直接返回最后一个相同的结点,即最近公共祖先

找根节点到目标结点的路径,是从根节点开始

每次迭代中,先入当前结点,再更新,最后迭代结束,加入目标值

寻找二叉树的公共祖先

思路还是找路径,然后返回最后一个相同的结点

但由于不是搜索树,不满足左子树比根节点小,右子树比根节点大的性质,所以找路径的方法不同

采用dfs方式找路径,如果已经找到了,或者是叶子结点尝试继续向下,则直接返回

不然就是还没找到,先把当前的结点入列,然后判断是不是目标值,如果是就打上标记并直接返回

不然,继续递归向下

遍历两个孩子,看flag,如果在左子树里找到了,flag就会为1,那么在右子树中就不会继续递归,不然继续

最后都遍历完后,可能找到了,也可能没找到,找到了就直接返回,不操作,不然就说明当下的子树里没有,应该回溯

二叉树性质,复杂度

对于二叉树,我们维护一个堆,插入和依次获取元素的时间复杂度皆为O(logn)

插入

将元素插入最后一位,再进行向上冒泡,即如果父节点的值小于被插入的元素,父节点下移,被插入的元素上移。时间复杂度取决于树的高度h。而完全二叉树的树的高度为[logn+1]的上取整,所示时间复杂度为O(logn)。

n是插入前的树的结点数,插入完后n++

选择题

 

 

插入排序需要不断移动左序列,即遍历到的位置之前是有序的,后面是无序的,只有到最后才完全有序;选择排序是每次选一个最大的交换到序列的相应尾端位置;冒泡排序也是这个思路,只不过选择排序是选后交换,每次只用一次,但冒泡排序选和交换同时进行,每次至少需要一次

快速排序在有序时最慢为n^2,原因

标记,一些与……无关的排序

元素的移动次数与关键字的初始排列次序无关的是:基数排序

元素的比较次数与初始序列无关是:选择排序

算法的时间复杂度与初始序列无关的是:选择排序

最坏的情况和最好的情况恰好相反,在指定好比较的方向下

如果是从左到右,每次都和有序的第一个(当前的最小)比较,那么逆序是最好,顺序是最坏

这时插入的判断条件是找到左边为空或比左边大,右边为空或比右边小的位置

如果是从右到左,每次都和有序的最后一个(当前的最大)比较,那么逆序是最坏,顺序是最好

因为逆序时,每次接下来的牌都是当前的最小,顺序时,每次的牌都是当前的最大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023 年 43 周

2023 年 43 周 普普通通的一周过去了,唯一需要感叹的,大概就是本年度余额只剩下 19%了: 学习进度 其实这周真的没什么特别大的进展,有种 here & there 的感觉,目前来说唯一能做的就是以锻炼为 anchor point 去寻找…

【Linux】NTP服务器配置、时间修改

查看当前系统时间date修改当前系统时间date -s "2018-2-22 19:10:30"查看硬件时间hwclock --show修改硬件时间hwclock --set --date "2018-2-22 19:10:30"同步系统时间和硬件时间hwclock --hctosys保存时钟clock –w1.设置NTP Server服务检查系统是否安装n…

动手学深度学习——第六次

python类和对象 python类和对象参数管理参数访问 卷积 python类和对象 参数管理 生成一个二维张量,然后传入有但隐藏层的多层感知机 参数访问 net[0] nn.Linear(4,8) net[1] nn.ReLU() net[2] nn.Linear(8,1) net[2].state_dict()访问最后一层的参数即权重和偏置 …

科大讯飞勾勒生成式AI输入法“模样”,开启下一代输入法革命

回顾国内第三方输入法赛道近十余年的发展,移动互联网的市场红利催生了科大讯飞、百度、搜狗等颇具规模和实力的头部厂商。与此同时,历经多年、多方角逐,第三方输入法市场进入存量阶段,升级技术、优化用户体验来挖掘存量&#xff0…

MatrixOne Meetup回顾 | 上海站

9月24日,MatrixOne 社区在上海成功举办了里程碑式的第一次 Meetup。活动吸引了数十位外部小伙伴一同交流探讨数据库行业内发展趋势、技术、以及应用的方方面面。通过分享、交流、互动,加深了参与者对MatrixOne的了解。未来,我们将继续在多个城…

半导体产线应用Power Link 转EtherCAT协议网关数字化转型

随着数字化转型的推进,越来越多的企业开始意识到数字化转型的重要性,并将其作为发展战略的关键之一。半导体产线作为一个高度自动化的生产系统,自然也需要数字化转型来提高效率、降低成本和提高质量。Power Link 转EtherCAT协议网关是半导体产…

高斯过程 Gaussian Process

What does GP do? GP是一种回归方法,但也能够用来分类和聚类均值表示数据最有可能出现的位置 多变量高斯分布 X ∼ N ( μ , Σ ) X\sim N(\mu,\Sigma) X∼N(μ,Σ): 包含的信息有每个变量的均值和协方差矩阵均值决定分布中心协方差矩阵确定形状 Marginalizatio…

Selenium自动化测试:如何搭建自动化测试环境?

最近也有很多人私下问我,selenium学习难吗,基础入门的学习内容很多是3以前的版本资料,对于有基础的人来说,3到4的差别虽然有,但是不足以影响自己,但是对于没有学过的人来说,通过资料再到自己写的…

c++-二叉树进阶

文章目录 前言一、二叉搜索树1、二叉搜索树介绍2、二叉搜索树循环实现3、二叉搜索树递归实现4、二叉搜索树的性能分析5、二叉搜索树的应用6、二叉树练习题6.1 根据二叉树创建字符串6.2 二叉树的层序遍历6.3 二叉树的层序遍历 II6.4 二叉树的最近公共祖先6.5 二叉搜索树与双向链…

项目文章 | Plant Physiology 华南农业大学揭示组蛋白修饰调节水稻器官大小的表观遗传机制

发表单位:华南农业大学生命科学学院 发表日期:2023年10月24日 期刊:Plant Physiology 影响因子:7.4 2023年10月24日,华南农业大学生命科学学院郑少燕副教授/刘振兰教授团队在Plant Physiology上发表题为“SET DOMA…

系列三十二、代理(二)静态代理

一、静态代理 1.1、概述 静态代理是由程序员创建或者工具生成代理类的源码,再编译代理类。在程序运行前就已经存在代理类的字节码文件了,即代理类和被代理类的关系在运行前就确定了。 简单理解:在程序运行前,代理类就存在了&…

Linux虚拟机安装centos7配置及常用命令

一.VMWare的安装 详情请看上期:VM虚拟机的安装与配置及操作系统的安装-CSDN博客 二.centos7安装 1.创建新的虚拟机 选择自定义,然后下一步 默认选择就行,直接下一步 选择稍后安装,然后直接下一步 选择Linux,然后向上…

【Python 零基础入门】常用内置函数 再探

【Python 零基础入门】内容补充 1 常用内置函数 Python 简介为什么要学习内置函数集合操作len(): 计算长度sorted(): 排序all(): 检查所有元素any(): 检查任一元素filter(): 过滤元素map(): 应用函数zip(): 组合元素 文件操作和输入输出open(): 打开文件read(): 读取文件write(…

深入解析 Spring Framework 中 @Autowired 注解的实现原理

摘要 关于Autowired注解的作用 Autowired 注解在Spring中的作用是实现依赖注入(Dependency Injection),它用于自动装配(autowiring)Spring Bean 的依赖关系。具体来说, Autowired 注解有以下作用&#xf…

3D模拟场景开发引擎

在3D工程模拟开发中,有一些专门的引擎和工具可供选择,以帮助您创建逼真的三维模拟和模型。以下是一些用于3D工程模拟的开发引擎和工具,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流…

Youtube DNN:Deep Neural Networks for YouTube Recommendations

1.介绍 本文主要解决的三个挑战: 大规模的推荐场景,能够支持分布式训练和提供有效率的服务。不断更新的新物料。稀疏的用户行为,包含大量的噪声。 2.推荐系统 文章包含推荐系统的两阶段模型:召回和排序。 召回网络根据用户的历…

CSS基础入门04

目录 1.内边距 1.1基础写法 1.2复合写法 2.外边距 2.1基础写法 2.2复合写法 2.3块级元素水平居中 3.去除浏览器默认样式 4.弹性布局 4.1初体验 5.flex 布局基本概念 6.常用属性 6.1justify-content 6.2align-items 1.内边距 padding 设置内容和边框之间的距离. …

Go 语言gin框架的web

节省时间与精力,更高效地打造稳定可靠的Web项目:基于Go语言和Gin框架的完善Web项目骨架。无需从零开始,直接利用这个骨架,快速搭建一个功能齐全、性能优异的Web应用。充分发挥Go语言和Gin框架的优势,轻松处理高并发、大…

Pycharm使用阿里云SDK发送短信(超详细+避坑!!)

文章目录 1. 注册阿里云2. 创建签名3. 创建模板4. 创建AccessKey5. API发送测试6. 获取示例7. pycharm发送验证码7.1 安装sdk7.2 参数修改7.3 发送随机四位数字7.4 验证码信息返回7.5 简易版代码: 1. 注册阿里云 访问阿里云官网,进行注册 https://www.…

ZYNQ连载03-Vivado创建工程

ZYNQ连载03-Vivado创建工程 1. 硬件参数 名称参数主控xc7z020clg400-2DDRMT41J256M16RE-125 2. 创建工程 3. 串口配置 4. DDR配置 5. SD配置 6. ETH配置 7. USB配置 8. 导出硬件 Generate Output ProductsCreate HDL WrapperExport Hardware Platform 执行以上步骤后&#…