数据结构学习之二叉树(理论篇)
注:本文的主要目的是为了记录自己的学习过程,也方便与大家做交流。转载请注明来自:
http://blog.csdn.net/ab198604
一、什么是树?
在前几篇的博文中主要讲述的是链式存储这种数据结构,它们的用途非常广泛,但是在实际的应用中,还存在着另一种非常重要的数据结构,它就是树。树的结构示意图如下所示:
上图就是一种数据结构----树,之所以在每个框中都留出空白,主要原因是这种结构如果根据上下文是能够传达一些重要的结构信息,比如我们可以作如下思考:
1、上图可以表示某公司的职能组织结构;
2、可以表示某公司从上层到底层的各种职位分布图;
3、可以表示某家族的族谱血缘关系;
4、可以表示计算机中的目录结构;
........
后面可以发挥自己的想象,只要能符合以上结构的都可以称之为树型结构。通过上述思考就可以发现树型结构的用途之广泛,它表示的是数据之间的一种层次关系,层与层之间存在着某种关系,我认为这就是树型结构的重要特点,这与其它结构有着很大的区别。
对树而言,先了解以下基本概念:
1
/ \
2 3
/ \ /
4 5 6
1、每棵树都有一个“根”,这是树的“根基”,称为root,通过root我们可以很容易的找到树上的各个支点,上图中“1”为树的root;
2、一棵树上的每个节点,它们有可能有分支,有可能没有分支,分支的数目称为分支因子。如上图中,最大的分支结因子为2,"3"结点的分支因子为1
3、每棵树都有一个高度,数据的层次数就是树的高度,上图中树的高度为3。
4、通用概念:
1与2,3之间的关系为:1是父,2是其左孩子,3是其右孩子。2与3相互之间称为兄弟。 没有孩子的结点称为叶子结点,如4\5\6结点。
二、什么是二叉树
对树而言,需要重点掌握二叉树。二叉树是一种特殊的顺序树,它规定有左右两个孩子,即左右孩子顺序不能替换,所以二叉树是一种有序树。二叉树的结点数为大于0小于等于2。对于二叉树,需要掌握以下性质:
性质1 在二叉树的第i层上至多有个结点(i>=1)
由数据归纳法即可证明,
i=1,结点数为1
i=2,结点数为2
i=3,结点数为4
i=4,结点数为8
I=n, 结点数为.
性质2 深度为K的二叉树至多有-1个结点(k >=1)
换言之,如果二叉树的深度确定,则其最大的结点数也是确定的。
证明(可以利用性质1)
深度为K的二叉树的结点个数=二叉树中每一层结点个数的总和。即为:
= 1 + 2 + 4 + 8 + … + =-1(等比公式)
性质3 二叉树中,终端结点个数与度为2的结点个数有如下关系:
= + 1
(注:度表示分支的个数,也指分支因子,终端结点也指叶子结点)
分析:二叉树中结点的度可以为0,1,2,也就是说需要证明结点的度为0与度为2的结点之间的关系是不变的。
证明:设二叉树中度为i的结点数为
则整棵二叉树的结点总数为:n =++ ------------(1)
除根结点外,每一个结点都是另一个结点的孩子,所以孩子数为n-1 --------(2)
度为i(I = 0,1,2)的结点,有i个孩子,
孩子数 = x 0 +x 1 +x 2 = 2 + ---------------(3)
因为:(3) = (2),所以,
n-1 = 2+ ------(4)
(4) – (1) ,得,
-1= - , 即 = + 1证毕.
性质1、2、3是二叉树的通用特性。
在介绍其它性质之前,先了解另一种特殊的二叉树,即满二叉树,其定义如下:
满二叉树是指深度为K,且有-1个结点的二叉树。
特点:(1) 每层上结点数都达到最大
(2) 度为1的结点个数=0,即不存在分支数为1的结点
如下即为一棵满二叉树:(注意其顺序:结点层序编号方法,从根结点起从上至下逐层从左至右对二叉树的结点进行连续编号)
1
/ \
2 3
/ \ / \
4 5 6 7
当K = 3, 结点数-1 = 7
完全二叉树:深度为k,结点数为n的二叉树,当且仅当每个结点的编号都与相同深度的满二叉树中从1到n的结点一一对应时,称为完全二叉树。
根据定义可以理解:深度为k的完全二叉树,其结点总数比深度k-1的满二叉树要多,但一定比深度为k的满二叉树要少。即有:完全二叉树示意如下:
1
/ \
2 3
/ \
4 5 (注意编号顺序,与满二叉树一一对应)
性质4:结点数为n的完全二叉树,其深度为(向下取整)+ 1
由性质2及完全二叉树的定义有:
结点数满足:
性质5:在按层序编号的n个结点的完全二叉树中,任意一个结点i()有:
(1) i = 1时,结点i是树的根,否则(i> 1),结点i的双亲为i/2(向下取整),如
,取i = 2.
(2) 2i > n时,结点i无左孩子,为叶结点,否则结点i的左孩子为结点2i
(3) 2i+1 > n时,结点i无右孩子,否则结点i的右孩子为结点2i +1.
性质4与性质五是针对完全二叉树而言的。性质6是针对二叉树的链式存储结构而言。
性质6: 含有n个结点的二叉链表中,有n + 1个空链域。
数据结构学习之二叉树(理论篇)相关推荐
- 小强软件测试_小强老师零基础学习软件测试视频教程 理论篇+自动化篇+工具篇+实战等零基础课程...
小强老师零基础学习软件测试视频教程 理论篇+自动化篇+工具篇+实战等零基础课程 1.jpg (53.32 KB, 下载次数: 0) 2017-10-5 09:33 上传 2.jpg (49.08 KB ...
- 【数据结构】二叉树——理论篇
文章目录 一.树的概念 二.树的表示方法 1.双亲表示法 2.孩子表示法 3.孩子兄弟表示法 三.二叉树 1.概念 2.特殊的二叉树 满二叉树 完全二叉树 二叉树结论 一.树的概念 提到树我们就不得不 ...
- Java数据结构学习——排序二叉树
目录 前言 正文 排序二叉树的特点 插入节点 删除树节点 删除的节点是叶子节点 删除的节点存在左或者右子节点 删除的节点存在左右两子节点 遍历节点 先序遍历 中序遍历 后续遍历 全部代码展示 总结 前 ...
- 与你一起学习MS Project——理论篇:项目管理与Project
Hi,你好!我是大黄蜂,非常高兴借此机会与你一起学习微软Project的相关知识和技能.这一次的分享主要是结合本人在实际使用Project 2013过程中的一些方法技巧,其中有一些材料则来源于互联网, ...
- java数据结构学习笔记-二叉树前、中、后序遍历
public class BinaryTreeDemo {public static void main(String args[]){Employee emp1= new Employee(1,&q ...
- 数据结构学习笔记(六):二叉树(Binary Tree)
目录 1 背景知识:树(Tree) 2 何为二叉树(Binray Tree) 2.1 二叉树的概念与结构 2.2 满二叉树与完全二叉树 2.3 二叉树的三种遍历方式 3 二叉树及其遍历的简单实现(Ja ...
- 艾伟_转载:学习 ASP.NET MVC (第五回)理论篇
本系列文章导航 学习 ASP.NET MVC (第一回)理论篇 学习 ASP.NET MVC (第二回)实战篇 学习 ASP.NET MVC (第三回)实战篇 学习 ASP.NET MVC (第四回) ...
- RabbitMQ学习总结 第一篇:理论篇
目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...
- 从零开始学习UCOSII操作系统13--系统移植理论篇
从零开始学习UCOSII操作系统13--系统移植理论篇 1.什么是系统移植? (1)UCOSII移植到不同的处理器上,所谓的移植就是将一个实时的内核能在其他的微处理器或者微控制器上运行. 为了方便移植 ...
最新文章
- Java排序算法总结
- windows 10下的kiosk模式
- struts2官方 中文教程 系列六:表单验证
- 云漫圈 | 什么是字符串匹配算法?
- python在docx指定位置插表格_超简单Python将指定数据插入到docx模板指定位置渲染并保存...
- 使用Git将本地项目上传到Github操作详解
- 07.计算Nova→2.nova组件详解→2.nova-scheduler
- 索益Mike的excel商品操作
- Python:Lasso方法、GM预测模型、神经网络预测模型之财政收入影响因素分析及预测...
- 怎么判断间隙过渡过盈配合_什么是间隙配合、过盈配合、过渡配合?它们在汽车上有哪些应用?...
- Qt Style Sheets Reference Qt css 样式属性列表[官版]
- 一台计算机连接两个投影,Win10系统电脑外接双显示器(投影仪)设置图文教程
- matlab:蚁群算法原理的实现
- 各大网站收录入口| 各大搜索引擎提交 | 搜索引擎提交地址
- 74hc595级联c语言程序,stm32使用三片74HC595级联程序代码
- android点击按钮执行adb命令,Android 按键事件及adb命令模拟
- 什么是云服务?vivo云服务是什么意思?
- 硬件设计2---什么是电阻?
- 非对称密码体制(公钥密码体制)中最基础的思路——MOD的运算
- 为何2020年,生鲜电商领域会迎来市场的大爆发?