数据结构与算法----树(下)

  大家好,今天继续学习树的数据结构。在上一章,我们讲树的孩子兄弟表示法时,提到了二叉树。今天,我们就来学习二叉树的相关性质。

 一、二叉树定义:

二叉树(Binary Tree):n(n≥0)个结点的有限集合,该集合或者为空集(为空时,称为空树),或者由一个根结点、两棵互不相交、称为根结点的左子树、右子树的二叉树组成。(Note:大家注意了,我们在给出二叉树定义时,我们利用了递归概念。就是先给出二叉树概念,再用二叉树概念去解释二叉树。递归是一种很重要的方法,在数据结构中是很重要的,我们会在后面章节中提到。)

我们看图来理解一下二叉树:

 

二、二叉树的特点:

  1、二叉树中的结点度数,一定小于等于2。(根据二叉树定义,由一个根结点、两棵互不相交的称为根结点左子树、右子树的二叉树组成。note:度数不是只能是2,是至多是2)

2、左子树与右子树是有顺序的,次序不能颠倒。

3、即使树中只有一个子树,也要区分左子树、右子树。

 

三、二叉树具有的5种基本形态:

1.空二叉树

2.只有根结点

3.只有左子树的二叉树

4.只有右子树的二叉树

5.既有左子树又有右子树

 

四、特殊二叉树:

1.斜二叉树:

   既然是斜二叉树,就一定要有斜度。

           

上面这两个图,就是斜二叉树。(note:看着是不是挺像线性表。其实,线性表就是二叉树的特殊表现形式)

 

2.满二叉树:

顾名思义,既然是满二叉树,就是每个结点都具备两个子树。如图:

如果二叉树中,每个结点都具备左子树、右子树,并且所有叶子结点都在同一层中,这样的二叉树称为满二叉树。

满二叉树的特点:

a.叶子结点只能出现在最后一层,如果不是,就不能达到满二叉树。

b.非叶子结点的度数只能为2,如果不是,就会出现“缺胳膊少腿”的现象。

c.在相同深度的二叉树中,满二叉树的结点最多,叶子结点最多。

3.完全二叉树:

对一棵具有n个结点的二叉树,按着层序编号,如编号为i(1≤i≤n)的结点位置,与同等深度的满二叉树中编号为i结点位置相同,则称这样的二叉树为完全二叉树。     完全二叉树不好理解,我们看一下图:

  

上面左图,是一棵完全二叉树,右图是一棵满二叉树。我们在心里给右图满二叉树按层序编号。通过左图与右图的对比,我们发现,左图中的任一结点,在右图中都有与之相对应的结点。

下面再给出几张不是完全二叉树的图:

     

完全二叉树特点:

a.如果结点度数为1,那么只能是左子树。(不存在只有右子树结点)

b.叶子结点只能出现在最下两层。

c.最下层的叶子结点,一定集中在左部连续位置。

d.倒数两层,如果有叶子结点,一定集中在右部连续位置。

e.同样结点数的树,完全二叉树的深度最小。

五、二叉树性质:

   接下来,我们来学习一下二叉树的性质。在实际应用中,都是通过二叉树的性质来操作的。二叉树的性质,是非常重要的概念。

a.在二叉树中,第i层的结点总数最多2^(i-1)个

第一层: 1=2^(1-1)=2^0=1

第二层:2=2^(2-1)=2^1=2

第三层:4=2^(3-1)=2^2=4

……

……

b.深度为k的二叉树,结点总数等于2^k-1

深度为1:1=2^1-1=1

深度为2:3=2^2-1=3

深度为3:7=2^3-1=7

……

……

c.如果n0是叶子结点,n2是度数为2的结点。则n0=n2+1.

二叉树中,除了叶子结点就是度数为1、度数为2的结点。我们假设度数为1的结点为n1、度数为2的结点为n2、叶子结点为n0.则树中结点总数为n=n0+n1+n2.我们观察上图,研究一下节点之间的连接线。因为根结点只有出去的线,没有进入的线。所以总线+1就是结点总数,n1+2n2+1=n0+n1+n2  n0=n2+1

d.具有n个结点数的完全二叉树的深度为[log2N]+1([x]表示不大于x的最大整数)。

e.如果对一棵有n个结点的完全二叉树(其深度为[log2N])的结点按层序编号(从第一层到[log2N]+1层,每层从左到右),对任一结点i(1≤i≤n)有:

1.如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则双亲为[i/2].

2.如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子是结点2i.

3.如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1

我们将在下一章讲解二叉树的存储结构

时间: 2024-10-11 14:21:14

数据结构与算法----树(下)的相关文章

【转】数据结构与算法(下)

这篇文章是常见数据结构与算法整理总结的下篇,上一篇主要是对常见的数据结构进行集中总结,这篇主要是总结一些常见的算法相关内容,文章中如有错误,欢迎指出. 一.概述 二.查找算法 三.排序算法 四.其它算法 五.常见算法题 六.总结 一.概述 以前看到这样一句话,语言只是工具,算法才是程序设计的灵魂.的确,算法在计算机科学中的地位真的很重要,在很多大公司的笔试面试中,算法掌握程度的考察都占据了很大一部分.不管是为了面试还是自身编程能力的提升,花时间去研究常见的算法还是很有必要的.下面是自己对于算法这

数据结构与算法---字符串(下)

前面两篇文章,分别介绍了字符串的概念.抽象数据类型.KMP模式匹配算法.这篇文章,我们来学习字符串的一些常用算法. 字符串的相关操作算法 StrAssign: /* 功能:生成一个其值等于Chars的串T */ Status StrAssign(String T, char *chars) { int i; if (chars[0] > MAXSIZE) return ERROR; T[0] = chars[0]; //chars[0]存放的是字符chars的长度 T[0]存放着的是串T的长度

MySQL索引背后的数据结构及算法原理(下)

为了讨论索引策略,需要一个数据量不算小的数据库作为示例.本文选用MySQL官方文档中提供的示例数据库之一:employees.这个数据库关系复杂度适中,且数据量较大.下图是这个数据库的E-R关系图(引用自MySQL官方手册): 下载文件后使用下面的语句将数据库导入: tar -xjf $HOME/Downloads/employees_db-full-1.0.4.tar.bz2 //解压缩,进入目录 cd employees_db/ //导入数据库root为用户名 mysql -t -u roo

数据结构与算法-树-二叉树与郝夫曼树

二叉树的遍历 二叉树的遍历指的是从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次. 二叉树的遍历方法: 前序遍历:规则是若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树. 1 void PreOrderTraverse(BiTree T) 2 { 3 if(T == NULL) 4 return; 5 printf("%c",T->data);/*显示结点数据,可以更改为其他对结点操作*/ 6 PreOr

数据结构与算法----树(中)

hey,我们继续上篇文章学习树.上篇文章,我们主要讲了树的一些基本概念.定义,抽象数据结构.今天,我们要学习它的数据结构,让我们开始学习吧. 树的存储结构: 一讲到存储结构,就会想到顺序存储与链式存储,让我们来回顾一下它们的概念.顺序存储,就是用一组连续的内存地址来存储数据元素,我们一般用一维数组来表示连续的内存地址.链式存储,用一块儿空闲的内存区域来存放数据元素.存放数据的地址不需要连续,通过元素中的指针域来表示逻辑关系.像之前我们学习的线性表,因为它是有唯一先驱.唯一后继.所以,顺序存储可以

数据结构与算法->树

代码: 兵马未动,粮草先行 作者: 传说中的汽水枪 如有错误,请留言指正,欢迎一起探讨. 转载请注明出处. 目录 一. 2-3-4树的定义 二. 2-3-4树的可以得到几个推论 三. 2-3-4树数据结构定义 四. 2-3-4树节点相关方法定义与解释 五. 2-3-4树查找逻辑解释和代码实现 六. 2-3-4树插入逻辑解释和代码实现 一. 2-3-4树的定义

数据结构与算法系列----平衡二叉树(AVL树)

一:背景 平衡二叉树(又称AVL树)是二叉查找树的一个进化体,由于二叉查找树不是严格的O(logN),所以引入一个具有平衡概念的二叉树,它的查找速度是O(logN).所以在学习平衡二叉树之前,读者需要了解二叉查找树的实现,具体链接:二叉查找树 那么平衡是什么意思?我们要求对于一棵二叉查找树 ,它的每一个节点的左右子树高度之差不超过1.(对于树的高度的约定:空节点高度是0:叶子节点高度是1.)例如下图: 如果我们的二叉查找树是不平衡该怎么办?进行旋转.经过分析发现,出现不平衡无外乎四种情况,下面我

python数据结构与算法 38 分析树

分析树 树的结构完成以后,该是时候看看它能做点什么实事儿了.这一节里,我们研究一下分析树.分析树能够用于真实世界的结构表示,象语法或数学表达式一类的. 图1 一个简单语句的分析树 图1所示是一个简单语句的层级结构,把语句表示为树结构可以让我们用子树来分析句子的组成部分. 图2 ((7+3)?(5?2))的分析树 我们也可以把数学表达式如((7+3)?(5?2))表示为分析树,如图2.此前我们研究过完全括号表达式,这个表达式表达了什么呢?我们知道乘法的优先级比加减要高,但因为括号的关系,在做乘法之

数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL

树.二叉树.三叉树.平衡排序二叉树AVL 一.树的定义 树是计算机算法最重要的非线性结构.树中每个数据元素至多有一个直接前驱,但可以有多个直接后继.树是一种以分支关系定义的层次结构.    a.树是n(≥0)结点组成的有限集合.{N.沃恩}     (树是n(n≥1)个结点组成的有限集合.{D.E.Knuth})      在任意一棵非空树中:        ⑴有且仅有一个没有前驱的结点----根(root).        ⑵当n>1时,其余结点有且仅有一个直接前驱.         ⑶所有结