数据结构基础:树结构的学习笔记

1、树的定义

树是n(n>=0)个节点的有限集合。当n=0时称为空树,当n>0 为非空树,任何非空树中,有且仅有一个根节点;其余节点可分为m(m>=0)个互不相交的有限集合T1、T2 等,其中每一个集合都可以称为一棵树,称为根节点的子树。

2、树的基本概念 

        双亲孩子、兄弟:节点的字数的根称为该节点的孩子,该节点称为其子节点的双亲。具有相同双亲的节点互为兄弟节点。如图:A是根节点,B、C、D互为兄弟;B是E、F的父节点(双亲);E、F 互为兄弟节点。

节点的度:一个节点下的子节点个数称为节点的度。比如 A的度为3,D的度为1。

叶子节点:是指度为0的节点,也被称为终端节点。比如 C、E、F、G都是叶子节点。

内部节点:度不为零的节点称为分支节点或非终端节点。去掉根节点,分支节点称为内部节点。比如:B、D。

节点的层次:根节点A属于第一层,依次类推。B属于第二层,E属于第三层。

树的高度:一棵树的最大层次数称为树的高度或者树的深度。

有序(无序)树:树中的节点的各个子树看成是从左到右有次序的,即不能交换,则称为有序树,否则为无序树。

森林:m(m>=0)棵互补相交的树的集合。

3、二叉树

3.1 二叉树定义

二叉树是n(n>=0)个节点的有限集合,它或者是空树(n=0),或者是由一个根节点及两棵不相交的、分别称为左子树、右子树的二叉树所组成。

3.2 二叉树和普通树的区别

二叉树中节点区分左子树、右子树,即便只有一个子树的情况下也有标明是左子树还是右子树,普通树则不区分;二叉树中节点最大度为2,普通树则没有限制节点的度数。

3.3 二叉树的性质

1、二叉树第i层上最多有  2^(i-1)个节点

2、深度为k的二叉树最多有(2^k)-1个节点

3、对任何一棵二叉树,若其终端节点数为n,度为2的节点数为n2,则n=n2+1

4、具有n个节点的完全二叉树的深度为(log2^n)+1

3.4 二叉树分类

1、满二叉树:深度为k的二叉树有2^(k-1)个节点,是满二叉树

2、完全二叉树:高度为k的二叉树,除了第k层都是满的,称为完全二叉树。满二叉树也是完全二叉树。具有n个节点的完全二叉树高度为 (log2^n) +1

3、非完全二叉树:不满足完全二叉树的称为非完全二叉树。

3.5叉树的存储结构

1、二叉树的顺序存储结构

用一组地址连续的存储单元存储二叉树的节点,必须把节点排成一个适当的线性序列,并且节点在这个序列中的相互位置可以反映出节点之间的逻辑关系

顺序存储适合对完全二叉树的存储方式,既简单又节省空间。对于一般二叉树而言,因为在顺序存储结构中,以节点在存储单元中的位置来表示节点之间的关系,所以存储方式也必须按照完全二叉树的方式存储,这样会造成空间上的浪费。最坏的情况,一个深度为h且只有h个节点的二叉树(也是单枝树)需要(2^h) -1 存储单元.

2、二叉树的链式存储结构

由于二叉树中节点包含数据、左子树根、右子树根、双亲信息,因此可以用三叉链表或二叉链表来 存储二叉树,链表的头指针指向二叉树的根节点。

3.6  二叉树的遍历

遍历是按某种策略访问树中的每个节点,仅访问一次。对于含有n个节点的二叉树遍历算法的时间复杂度都是O(n).

3.7  哈夫曼树(最优二叉树)

节点的路径:从树的一个节点到另一个节点之前的通路。

该通路的分支数据称为路径长度。

节点的带权路径:节点到树根之间的路径长度*该节点的权重值。

树的带权路径长度为树种所有叶子节点的带权路径长度之和。数值最小的就是哈夫曼树。

IT技术分享社区

个人博客网站:https://programmerblog.xyz

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

 

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

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

相关文章

android组件用法说明,Android第三方控件PhotoView使用方法详解

Android第三方控件PhotoView使用方法详解发布时间:2020-10-21 15:06:09来源:脚本之家阅读:74作者:zhaihaohao1PhotoView的简介:这是一个图片查看库,实现图片浏览功能,支持pinch(捏合)手势或者点…

idea中新建分支并且切换到新建的分支上

开发新功能,idea上新建自己的分支,要在dev分支上新建 首先,idea右下角可以看到目前在dev分支上 点击dev,接着New Branch 输入分支名 在Local Branches中就显示了 然后可以看到已经切换到刚新建的分支上了 想要切换到刚新建的分支上开发时,可以点击分支,在弹框上点击Checkout

vnpy怎么创建策略并回测_【手把手教你】入门量化回测最强神器backtrader(一)

1 引言目前基于Python的量化回测框架有很多,开源框架有zipline、vnpy、pyalgotrader和backtrader等,而量化平台有Quantopian(国外)、聚宽、万矿、优矿、米筐、掘金等,这些量化框架或平台各有优劣。就个人而言&#xff…

数据结构基础:算法的基础知识笔记

1、算法的概念算法是问题求解过程中的精确描述,它为解决某一特定类型的问题规定了一个运算过程。2、算法的特点2.1 有穷性一个算法必须在有穷的步骤结束后结束,并且每一步都在有穷时间内完成。2.2 确定性算法的执行过程中每一步都要有确定的定义&#xf…

Spring Bean Scope 有状态的Bean 无状态的Bean

在Spring的Bean配置中&#xff0c;存在这样两种情况&#xff1a; [xhtml] view plaincopy<bean id"testManager" class"com.sw.TestManagerImpl" scope"singleton" /> <bean id"testManager" class"com.sw.TestMana…

数据结构基础:图结构的学习笔记

1、图的定义图是比树更加复杂的数据结构&#xff0c;在图的结构当中&#xff0c;任意两个节点之间都有可能有直接关系&#xff0c;所以图中一个节点的前驱和后继的数目是没有限制的。2、图的用途用于描述各种复杂的数据对象&#xff0c;在自然科学、社会科学和人文科学等很多领…

企业网站 源码 服务邮箱:_企业网站建设对于服务器的选择至关重要

网站建设是离不开租用服务器的&#xff0c;这是目前大多数企业都在做的。但有些企业由于对网站服务器的租用技巧及经验的缺乏&#xff0c;经常会导致网站在运营过程中出现非常多的问题&#xff0c;严重影响了企业业务的正常开展。石家庄网站建设方面的人才来说明几点不容忽视的…

linux sli 提高效率,从原理到性能提升 MCP78智能SLI全解析

NVIDIA正式发布了“Hbrid SLI”技术在昨日的2008 CES上&#xff0c;NVIDIA正式向外界发布了“Hbrid SLI”技术&#xff0c;即我们所俗称的混合SLI&#xff0c;而NVIDIA在发布时已更正式名为“智能SLI技术”。虽然这仅仅是NVIDIA在此次消费电子展上的宣讲主题之一&#xff0c;但…

git操作代码文件的颜色变化

1.若文件显示红色&#xff0c;表示文件未add到git进行管理 2.若文件显示绿色&#xff0c;表示文件已经交给git管理&#xff0c;但从未上传到远程仓库中 3.若文件显示蓝色&#xff0c;表示文件已经上传过远程仓库&#xff0c;且此时本地文件与远程仓库文件不一致 4.若文件显示…

[GitHub]第三讲:简单分支操作

Git 最核心的操作对象是版本&#xff08; commit &#xff09;&#xff0c;最核心的操作技巧就是分支。 什么是分支&#xff1f; 仓库创建后&#xff0c;一旦有了新 commit&#xff0c;默认就会放到一个分支上&#xff0c;名字叫 master。前面咱们一直看到的多个版本组成的一条…

算法基础:常用的排序算法知识笔记

1、算法外排序分类2、冒泡排序冒泡排序&#xff08;Bubble Sort&#xff09;属于交换排序&#xff0c;它的原理是&#xff1a;循环两两比较相邻的记录&#xff0c;如果反序则交换&#xff0c;直到没有反序的记录为止。实现算法&#xff1a;/*** 冒泡排序优化后的算法* 设置一个…

302状态码_http状态码是什么?301 302 404的SEO应用场景

什么是HTTP状态码&#xff1f;简单的讲&#xff0c;就是用以表示网页服务器HTTP响应状态的3位数字代码。其中1xx表示临时响应&#xff0c;2xx表示成功处理了请求&#xff0c;3xx代表重定向&#xff0c;4xx表示请求错误&#xff0c;而5xx表示服务器错误。除了网页正常返回200之外…

Android高版本开机广播,android3.1以上,假如程序没有启动过,怎么获取开机广播呢?...

官方说不支持&#xff1a;Launch controlson stopped applicationsStarting from Android 3.1, the systems package manager keepstrack of applications that are in a stopped state and provides ameans of controlling their launch from background processes andother a…

git push前请先git pull

开发过程中 如果要推送代码到远程仓库&#xff0c;请先git pull。养成好习惯。 原因很简单&#xff0c;在你开发过程中&#xff0c;你的同事可能也在改代码然后他提交了没通知你&#xff0c;你直接git push很容易造成代码冲突&#xff0c;代码冲突解决也简单&#xff0c;可万一…

table 中 thead tbody tfoot 加载顺序问题

这几个标记主要是用于提高table标签的加载以及显示的&#xff0c;说白了&#xff0c;就是分布加载。在传统的浏览器&#xff0c;在加载 时&#xff0c;是当所有的标签中元素都被下载后才会显示&#xff0c;当然这样的用户体验是不好的。再加入了这几个t打头的标签后&#xff0c…

算法基础:常用的查找算法知识笔记

1、查找表和查找效率的概念查找表是指由同一类型的数据元素构成的集合。分为静态查找表和动态查找表。1.1 静态查找表1、查询某个特定元素是否在查找表的集合当中2、查询某个特定元素的各种属性1.2 动态查找表1、在查找表中插入一个数据元素2、在查找表中删除一个元素1.3 关键字…

注解参数怎么使用变量_硅橡胶胶水有哪些特点?使用参数表现的怎么样?如何储存?...

作为单组分产品&#xff0c;硅橡胶胶水的使用方法简单又灵活。直接涂抹在粘接基面上&#xff0c;固化之后即可抵抗外界的压力与冲击。别看它的规格不是很打&#xff0c;却可以顺顺利利完成粘接&#xff0c;形成保护膜。硅橡胶胶水有哪些特点?没有固化之前&#xff0c;是半透明…

android 谷歌邮箱,Android 使用 SMTP 发送邮件 (Gmail)

具体使用方法请看&#xff1a;http://www.oschina.net/code/snippet_12_9831.[代码]GMailSender.javapackage org.apache.android.mail;import javax.activation.DataHandler;import javax.activation.DataSource;import javax.mail.Message;import javax.mail.PasswordAuthent…

Java中return的两种用法

一、return语句总是用在方法中&#xff0c;有两个作用。 一个是返回方法指定类型的值&#xff08;这个值总是确定的&#xff09;。 一个是结束方法的执行&#xff08;仅仅一个return语句&#xff09;。 一般的就百是用在有反回值的方法中&#xff0c;用来返回方度法指定问类…

Alpha版总结会议

一、会议过程 我们于第十五周周一开始在学院楼针对前一段时间开发过程中的问题进行了讨论。会议期间我们整合并回顾了一下两次冲刺周期的成果。会议开始首先每个人都先发表了自己针对Alpha版开发过程中存在的疑惑和一些问题的看法。我们最后挑选出出三个最具针对性的问题进行了…