树和二叉树的基本概念

一、树的定义

    由一个或多个(n≥0)结点组成的有限集合T,有且仅有一个结点称为根(root),当n>1时,其余的结点分为m(m≥0)个互不相交的有限集合T^1, T^2,....,T^m。每个集合本身又是一颗树,被称为这个根的子树。

注1:过去许多书籍中都定义树为n>1,曾经有“空树不是树”的说法,但现在树的定义已修改。

注2:树的定义具有递归性,即树中有树

二、树的术语

根————即根结点(没有前驱)

叶子———即终端结点(没有后继)

森林———指m棵不相交的树的集合(例如删除A后的子树个数)

有序树——结点各子树从左至右有序排列,不能互换(左为第一)

无序树——结点各子树可互换位置

双亲———即上层的哪个结点(直接前驱)Parent

孩子———即下层结点的子树(直接后继)Child

兄弟———同一双亲下的同层结点(孩子之间互称兄弟)Sibling

堂兄弟——即双亲位于同一层的结点(但并非同一双亲)Cousin

祖先———即从根到该结点所经分支的所有结点

子孙———即该结点下层树中的任一结点

结点———即树的数据元素

结点的度—结点挂接的子树数(有几个直接后继就有几度,或称“次数”)

结点的层次——从根到该结点的层数(根结点算第一层)

终端结点—即度为0的结点,即叶子

分支结点—除树根以外的结点(也称为内部结点)

树的度——所有结点度中的最大值(Max{各结点的度})

树的深度—指所有结点中最大的层数(Max{各结点的层次})或高度

3、树的表示法(百度查资料)

1、图形表示法

2、嵌套集合表示法

3、广义表表示法

4、目录表示法

5、左孩子-右孩子表示法(二叉树)

 

4、树的逻辑结构

树的特点是1对多(1:n),有多个直接后继(如家谱树、目录树等),但只有一个根结点,且子树之间互不相交。

5、树的存储结构

树虽是非线性结构,但仍然有顺序存储、链式存储等方式。

讨论1:树的顺序存储方案应该怎样制定?

可规定为:从上至下、从左至右将树的结点依次存入内存。

重大缺陷:复原困难

讨论2:树的链式存储方案应该怎样知道?

可用多重链表:一个直接前驱、n个直接后继指针。

细节问题:树中结点 的结构类型样式该如何设计?即应该设计成“等长”还是“不等长”?

缺点:等长结构太浪费(每个结点的度不一定相同);

  不等长结构太复制(要定义多种结构类型)

(使用链表存储后继结点,或改为二叉树)

6、树的运算

要明确:

1、普通树(即多叉树)若不转化为二叉树,则运算很难实现。

2、二叉树的运算仍然是插入、删除、修改、查找、排序等,但这些操作都必须建立在对树结点能够“遍历”的基础上。

(遍历——指每个结点都被访问且仅访问一次,不遗漏不重复)

7、二叉树

二叉树的结构最简单,规律性最强;

可以证明,所有的树都能转化为唯一对应的二叉树,不失一般性。

8、二叉树的定义

定义:n(n≥0)个结点的有限集合,由一个根节点以及两颗互不相交的、分别称为左子树和右子树的二叉树组成。

逻辑结构:一对二(1:2)

基本特征:

1、每个结点最多只有两颗子树(不存在度>2的结点)。

2、左子树和右子树次序不能颠倒(有序树)。

9、二叉树的性质

1、在二叉树的第i层上至多有2^(i-1)个结点(i>0)。

2、深度为k的二叉树至多有(2^k)-1个结点(k>0)。

3、满二叉树:一颗深度为k且有(2^k)-1个结点的二叉树。(特点:,每层都“充满”了结点)

4、完全二叉树:深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应。(特点:只有最后一层叶子不满,且全部集中在左边),这其实是顺序二叉树的含义。

5、满二叉树与完全二叉树在顺序存储方式下可以复原。

6、对完全二叉树,若从上至下,从左至右编号,则编号为i的结点,其左子树编号必为2i,其右子树编号必为2i+1,其双亲的编号必为i/2(i=1时为根,除外)。

对于第k层中的编号为i的元素,在第k层中前面有x=i-2^(k-1)个元素,在第k层中后面有y=2^(k-1)-1-x个元素,则其左孩子编号为:

i+y+2x+i=i+2^(l-1)-1-x=2x+1=i+2^(k-1)+x=i+2^(k-1)+i-2^(k-1)-2i

则其右孩子编号为:

i+y+2x+2=2i+1

对于左右孩子,其双亲结点编号必然为i/2。

 

posted @ 2017-11-15 00:38  LandyTan  阅读(1273)  评论(0编辑  收藏  举报