数据结构之树【完善中】

一、树的概念

树是一种分组的层次结构。

树的定义:

树是n(n>=0)个数据元素的集合,在任意一棵非空树中,有如下特征

  1. 有且只有一个根结点(无前驱结点)
  2. 当n>1时,其他结点被分为若干个互不相交集合,并且每个集合又是一棵树

我们可以看到树的定义引用了集合的概念和迭代的概念。

二、树的表示方法

  1. 文氏图
  2. 圆括号
  3. 凹入法
  4. 树形图

三、基本术语

  1. 结点:树的结点包含一个数据元素和若干指向其他子树的分支
  2. 结点的度:结点的子节点的个数
  3. 树的度:树的所有结点的度的最大值
  4. 叶子结点:结点的度为0的结点
  5. 分支结点:结点的度不为0的结点
  6. 兄弟结点:同一个父结点下的子节点称为兄弟结点
  7. 层数:根节点的层数为1,其他结点的层数为父节点的层数加1
  8. 树的深度:所有结点层数的最大值
  9. 森林:零棵或者有限棵互不相交的树称为森林
  10. 有序树和无序数:结点的各子节点从左到右无序(可以互换)的树称之为无序树,否则称为有序树

四、二叉树

1、二叉树的定义

一种特殊的树,除了有树的特征外,还有如下特征:

  1. 当结点数大于0时,该树由根节点和两个子树组成,分别称之为左子树和右子树
  2. 左子树和右子树又是二叉树

2、二叉树的基本操作

  1. CreateTree创建一棵二叉树
  2. ShowTree用凹入法或者圆括号法显示一棵二叉树
  3. PreOrder按照先序(根,左,右)遍历一棵二叉树上的所有结点
  4. InOrder按照中序(左,根,右)遍历一棵二叉树上的所有结点
  5. PostOrder按照后序(左,右,根)遍历一棵二叉树上的所有结点
  6. LevelOrder按层次遍历一棵二叉树上的所有结点
  7. Leafnum求一棵二叉树上的所有叶子结点
  8. TreeDepth求一棵二叉树的深度

3、二叉树的性质

  • 一棵二叉树的第i层至多有2分之i-1个结点
  • 深度为h的一棵二叉树至多有2分之h-1个结点
  • 对于一棵有n个结点的完全二叉树,若按照满二叉树的方式对结点进行编号,对于任意编号为i的结点,有如下性质
  1. i等于1的结点为根结点,当i>1时,该结点的父节点编号为i/2
  2. 当2i<=n时,该结点的左子结点编号为2i,当2i>n时,该结点没有左子节点
  3. 当2i+1<=n时,该结点的右子节点编号为2i+1,当2i+1>n时,该结点没有右子节点
  • 具有n(n>0)个结点的完全二叉树,其深度为floor(log2n)+1,floor表示向下取整
  • 对于一棵非空的二叉树,设结点的度为0,1,2的结点的个数分别为n0,n1,n2,那么有:n0=n2+1

 

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

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

相关文章

phpgif图片包_PHP生成GIF动态图片验证码

1 <?php2 /**3 * 调用示例4 **/5 session_start();6 $randCode ;7 //验证码随机8 $str"abcdefghjkmnpqrstuvwsyzABCDEFGHJKMNPQRSTUVWSYZ23456789";9 for($i0;$i<4;$i){10 $safe.substr($str,rand(0,strlen($str)),1);11 }12 $_SESSION["imgcode"]…

工程图标注粗糙度_Inventor教程之工程图标注实例

1工程图标注实例对以下实体零件进行全部的标注演示。操作步骤如下&#xff1a;(1)打开文件。运行Inventor&#xff0c;单击“快速入门”选项卡“启动”面板上的“打开”按钮&#xff0c;在“打开”对话框中选择“实体零件”&#xff0c;单击“打开”按钮进入实体零件。(2)新建工…

Oracle数据库 invalid character问题解决

今天使用PL/SQL Developer这个工具来操作Oracle数据时发现了一个问题&#xff1a; select * from tb_student_grade pivot(max(grade) for course in(math as 数学,chinese as 语文,english as 英语)); 执行这个SQL语句提示invalid character,原因是我的数据库编码是AMERICAN…

定时线程_SpringBoot定时任务,@Async多线程异步执行

一、使用SpringBoot实现定时任务这个不是重点&#xff0c;就简单的实现一下&#xff0c;至于cron表达式怎么写也不是重点&#xff0c;自行百度即可。1-1、基于 Scheduled 注解的方式import org.springframework.scheduling.annotation.EnableScheduling;import org.springframe…

SpringBoot入门一

SpringBoot能够很简单的创建一个直接运行的单体Spring应用 特性&#xff1a; 单体Spring应用内置的tomcat、Jetty提供默认的starter来构建配置自动配置Spring和第三方库 推荐一个很好的学习教程&#xff0c;https://blog.csdn.net/u010486495/article/details/79348302 1 构…

mysql怎么把datetime类型转换_mysql怎样实现time转datetime

mysql实现time转datetime的方法&#xff1a;使用在sql语句中【FROM_UNIXTIME(时间值)】&#xff0c;代码为【insert into test(time) values(FROM_UNIXTIME(%d))",time(NULL)】。mysql实现time转datetime的方法&#xff1a;FROM_UNIXTIME(time(NULL))将liunx系统的time_t类…

SpringBoot入门二

参考Spring Boot Starters - 御坂研究所 创建自己的starter starter是依赖的一种synthesize&#xff08;合成&#xff09;。 starter会把需要用到的依赖全部包含进来&#xff0c;避免开发者自己手动引入依赖。 starter的逻辑 pom.xml<parent><groupId>org.spri…

Tomcat入门

一&#xff0c;tomcat启动 双击startup.bat,如果出现一闪而过的情况&#xff0c;在文件的末尾添加pause&#xff0c;就可以看到环境变量设置的路径是否正确 如果无法在电脑的高级系统设置中设置环境变量&#xff0c;可以在setclasspath.bat中设置环境变量 set JAVA_HOMEC:\P…

php mysql 图像_将图像插入MySQL并使用PHP检索图像

此文可能比较繁琐&#xff0c;有更好的方法&#xff0c;但是出于教程目的&#xff0c;这是我的"“最佳实践”的路线。今天&#xff0c;我们将讨论一个似乎每个人都有些困惑的话题……在MySQL中存储BLOB图像&#xff0c;然后使用PHP再次显示它们。尽管始终建议不要这样做&a…

利用Maven逆向工程生成mybatis映射文件

一&#xff0c;pom.xml 注意修改逆向工程配置文件的路径 <build><pluginManagement><plugins><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1…

mysql update多个表_mysql update 多表 (复制)

定我们有两张表&#xff0c;一张表为Product表存放产品信息&#xff0c;其中有产品价格列Price&#xff1b;另外一张表是ProductPrice表&#xff0c;我们要将ProductPrice表中的价格字段Price更新为Price表中价格字段的80%。在Mysql中我们有几种手段可以做到这一点&#xff0c;…

ORA-00907:missing right parenthesis缺少右括号

一&#xff0c;有嵌套查询&#xff0c;并且子查询中用了union all合并两个查询时&#xff0c;前一个查询用了order by&#xff0c;那么会报错并提示ORA-00907:missing right parenthesis缺少右括号&#xff1a; select * from ( select t.* from emp t where t.jobMANAGER ord…

mysql重复记录大于十的数据库_面试官:在使用mysql数据库时,遇到重复数据怎么处理?...

前言前段时间&#xff0c;很多人问我能不能写一些数据库的文章&#xff0c;正好自己在测试mysql数据库性能的时候&#xff0c;出现了一个问题&#xff0c;也就是出现了很多重复的数据&#xff0c;想起来自己long long ago写过一篇类似的&#xff0c;仅此就拿来总结了一下。如果…

线程组的概念

一&#xff0c;线程组和线程的结构&#xff1a;树形结构 每个Thread必然存在于一个ThreadGroup中&#xff0c;Thread不能独立于ThreadGroup存在。 执行main()方法线程的名字是main 如果在new Thread时没有显式指定&#xff0c;那么默认将父线程&#xff08;当前执行new Threa…

mysql中ak替换键_数据库:唯一性约束_alternate key(替换键) mySQL Oracle 数据库 ak 唯一性约束...

数据库:唯一性约束_alternate key(替换键) mySQL Oracle 数据库 ak 唯一性约束数据库:唯一性约束所谓唯一性约束(unique constraint)不过是数据表内替代键的另一个名称而已。替代键(alternate key)可以是数据表内不作为主键的其他任何列&#xff0c;只要该键对该数据表唯一即可…

Oracle自定义类型

Oracle自定义类型可以通过type/create type来声明或者创建 一&#xff0c;四种创建方式 1.1&#xff0c;使用create type创建object类型 create or replace type obj_type as object(id number,name varchar2(50 byte),birthday date); 1.2&#xff0c;使用create type创建…

Oracle/mysql查询语句的执行过程

执行顺序 from on join/pivot/unpivot(mysql没有pivot和unpivot) where group by having select distinct order by limit&#xff08;oralce没有&#xff09; 书写顺序 select distinct <select_list> from <left_table> <join_type>join <righ…

mysql定时sql脚本_定时执行的SQL脚本

因为要同步一个表&#xff0c;所以每天要同步一次数据&#xff0c;但是对SQL不是精通的我&#xff0c;为了测试写了一段代码来测试定时功能创建一个存储过程&#xff0c;是用来插数据的&#xff0c;没有输出和输出参数create or replace procedure temp_pro asbegininsert into…

mysql xml语句_Mysql语句

xml文件转义字符处理(1)(2)直接写转义后的字符1、mysql里批量修改表内某个字段内的部分数据UPDATE inventory_stockSET batchno REPLACE(batchno,-20-201901,-50-2019)2、ON DUPLICATE KEY UPDATE根据主键判断是新增还是修改(也可以有两个或多个主键)INSERT INTO TABLE (a,c) …

destoon网站mysql分表_destoon : 常用数据库操作

destoon在初始化系统后系统会自动连接数据库&#xff0c;并将数据库操作对象保存在$db。对于数据库操作方法参考include/db_mysql.class.php函数原型&#xff0c;我来写几个常用数据库操作。1、读取单条信息$S $db->get_one("SELECT * FROM {$DT_PRE}table WHERE xxxy…