数据结构-树

树(Tree)是n(n>=0)个节点的有限集。n=0时称为空树。在任意一个非空树中:(1)有且仅有一个特定的称为根(Root)的节点;(2)当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1,T2.......Tm,其中每一个集合本身又是一棵树,并且称为根的子树(Sub Tree).

数据结构-树_第1张图片

 

 

结点分类:

结点拥有的子节点树称为结点的度(Degree).

度为0的结点,称为叶结点或终端节点

度不为0的结点称为非终端节点或分支结点。

除根结点之外,分支结点也成为内部结点。

数的度是数内各结点的度的最大值。

数据结构-树_第2张图片

 

结点间的关系

 

结点的子树的根称为该结点的孩子(Child),相应的,该结点称为孩子的双亲

 

数据结构-树_第3张图片

 

线性结构与树结构的比较

数据结构-树_第4张图片

 

二叉树

二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成

下图就是二叉树:

 

数据结构-树_第5张图片

 

数据结构-树_第6张图片

 

二叉树具有五种基本形态:

1,空二叉树

2,只有一个结点

3,根结点只有左子树

4,根结点只有右子树

5,根结点既有左子树又有右子树

数据结构-树_第7张图片

 

特殊的二叉树:

1,斜树:所有的结点都只有左子树的二叉树叫左斜树(上图树2)。所有的结点都只有右子树的二叉树叫右斜树。

2,满二叉树:一个二叉树中,所有的分支结点都有左子树和右子树,并且所有的叶子都在同一层,这样的二叉树称为满二叉树;

3,完全二叉树:对一棵具有n个结点的二叉树按层序编号,如果标号为i(1<=i<=n) 的结点与同样深度的满二叉树中编号为i的结点在二叉树中的位置完全相同,则这棵树称为完全二叉树

下图就是一个完全二叉树:

数据结构-树_第8张图片

 

注意:

 

 

 

数据结构-树_第9张图片

二叉树的性质

-------03.20.193------

 

二叉树性质1:在二叉树的第i层之多有

 

数据结构-树_第10张图片

个结点(i>1)

 

二叉树性质2:深度为K的二叉树至多有

 

数据结构-树_第11张图片

个结点(k>1)

 

二叉树性质3:对任意一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1

 

数据结构-树_第12张图片

二叉树性质4:具有n个结点的完全二叉树的深度为[log2 n] + 1

二叉树性质5:

 

 

 

数据结构-树_第13张图片

二叉树存储结构:

可以顺序存储二叉树,但是顺序存储结构一般只用于完全二叉树。

下面这种以顺序存储二叉树的方式就特别浪费内存空间

数据结构-树_第14张图片

 

二叉链表

二叉树每一个结点最多有两个孩子,所以为他设计一个数据域和两个指针域是比较自然的想法,我们称这样的链表叫做二叉链表

 

指针

 

 

遍历二叉树

二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每一个结点被访问一次且仅被访问一次;

 

二叉树的遍历方法:

1,前序遍历

        规则:若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。

下图的遍历结果为:ABDGHCEID

数据结构-树_第15张图片

2,中序遍历

        规则:若树为空,则空操作返回,否则从根结点开始(注意并不是想访问根结点),中序遍历根结点的左子树,然后访问根结点,最后中序遍历右子树

下图的遍历结果是:GDHBAEICF

数据结构-树_第16张图片

3,后序遍历

        规则:若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点

下图的遍历结果是:GHDBIEFCA

数据结构-树_第17张图片

 

4,层序遍历

        规则:若树为空,则空操作返回,否则从树的第一层,也就是根结点开始访问,从上而下逐层遍历,在同一层中,按照从左到右的顺序对结点逐个访问

下图的遍历结果是:ABCDEFGHI

数据结构-树_第18张图片

 

 

线索二叉树:我们把这种指向前驱和后继的指针称为线索,加上线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树。

 

 

树与森林的遍历:

树的遍历分为两种方式:

        1,一种是先根遍历树,即先访问根结点,然后依次先根遍历根的每棵树。

        2,另一种是后根遍历,即先依次后根遍历每棵树,然后再访问根结点。

 

森林的遍历也分为两种方式:

        1,前序遍历:先访问森林中的第一棵树的根结点,然后再依次先根遍历根的每棵子树,再依次用同样的方式遍历除去每一棵树的剩余树构成的森林。

        2,后序遍历:先访问森林中的每一个棵树,后根遍历的方式遍历每棵子树,然后再访问根结点,再依次同样的方式遍历除去每一棵树的剩余树构成的森林。

 

 

 

赫夫曼(David Huffman,美国数学家

 

 

 

 

 

 

 

你可能感兴趣的:(数据结构-学习笔记)