[数据结构]树和二叉树

本文详细介绍了树和二叉树的定义、基本操作以及相关性质,包括查找、插入和删除操作。二叉树的五种形态、遍历算法如前序、中序和后序遍历也得到了详细阐述。此外,文章还讨论了树的存储结构,如顺序存储和链式存储,并介绍了二叉树的线索化以及哈夫曼树和编码。通过实例和算法演示,帮助读者深入理解树和二叉树的概念及其在数据结构中的应用。
摘要由CSDN通过智能技术生成

第六章 树和二叉树

6.1树的类型定义

数据对象 D:D是具有相同特性的数据元素的集合。

数据关系 R:若D为空集,则称为空树 。否则:

  (1) 在D中存在唯一的称为根的数据元素root;

  (2) 当n>1时,其余结点可分为m (m>0)个互不相交的有限集T1, T2, …, Tm,其中每一棵

     子集本身又是一棵符合本定义的树,称为根root的子树。

 

 基本操作:

·查  找  类

·插  入  类

·删  除  类

查找类:

Root(T) // 求树的根结点

Value(T, cur_e) // 求当前结点的元素值

Parent(T, cur_e) // 求当前结点的双亲结点

LeftChild(T, cur_e) // 求当前结点的最左孩子

RightSibling(T, cur_e)  // 求当前结点的右兄弟

TreeEmpty(T)  // 判定树是否为空树

TreeDepth(T)  // 求树的深度

TraverseTree( T, Visit() )  // 遍历

插入类:

InitTree(&T)  // 初始化置空树

CreateTree(&T, definition)   // 按定义构造树

CreateTree(&T, definition)   // 按定义构造树

InsertChild(&T, &p, i, c)     // 将以c为根的树插入为结点p的第i棵子树

删除类:

ClearTree(&T) // 将树清空

DestroyTree(&T)  // 销毁树的结构

DeleteChild(&T, &p, i)  // 删除结点p的第i棵子树

 

树形图表示的例子

 

对比树型结构和线性结构的结构特点

线性结构                                     树型结构

第一个数据元素                                根结点

      (无前驱)                                  (无前驱)

 

最后一个数据元素                           多个叶子结点

       (无后继)                                (无后继)

 

其它数据元素                              其它数据元素    

(一个前驱、一个后继)                      (一个前驱、多个后继)

 

基  本  术  语

结点:  数据元素+若干指向子树的分支

结点的度: 分支的个数

树的度:   树中所有结点的度的最大值

叶子结点: 度为零的结点

分支结点: 度大于零的结点

 

(从根到结点的)路径:由从根到该结点所经分支和结点构成

孩子结点、双亲结点

兄弟结点、堂兄弟

祖先结点、子孙结点

结点的层次:假设根结点的层次为1,第l 层的结点的子树根结点的层次为l+1

树的深度:树中叶子结点所在的最大层次

 

有向树:(1) 有确定的根;

        (2) 树根和子树根之间为有向关系。

有序树:子树之间存在确定的次序关系。

无序树:子树之间不存在确定的次序关系。

森林:是m(m≥0)棵互不相交的树的集合

任何一棵非空树是一个二元组Tree = (root,F)

其中:root 被称为根结点F 被称为子树森林

 

 

6.2 二叉树的类型定义

 二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的、互不交的二叉树组成。

 

二叉树的五种基本形态:

 

 二叉树的主要基本操作:

·查  找  类

·插  入  类

·删  除  类

Root(T);    Value(T, e);    Parent(T, e);

LeftChild(T, e);     RightChild(T, e);

LeftSibling(T, e);     RightSibling(T, e);

BiTreeEmpty(T);      BiTreeDepth(T);

PreOrderTraverse(T, Visit());

InOrderTraverse(T, Visit());

PostOrderTraverse(T, Visit());

LevelOrderTraverse(T, Visit());

 

InitBiTree(&T);

Assign(T, &e, value);

CreateBiTree(&T, definition);

InsertChild(T, p, LR, c);

 

ClearBiTree(&T);

DestroyBiTree(&T);

DeleteChild(T, p, LR);

性质 1 : 在二叉树的第 i 层上至多有2i-1 个结点。         (i≥1)

用归纳法证明:

归纳基:i = 1 层时,只有一个根结点:2i-1 = 20 = 1;

归纳假设:假设对所有的 j,1≤ j < i,命题成立;

归纳证明:二叉树上每个结点至多有两棵子树,则第 i 层的结点数 = 2i-2´ 2 = 2i-1

性质 2 :深度为 k 的二叉树上至多含 2k-1 个结点(k≥1)。

性质 3 :对任何一棵二叉树,若它含有n0 个叶子结点、n2 个度为 2 的结点,则必存在关系式:n0 = n2+1。

证明:设 二叉树上结点总数 n = n0 + n1 + n2又 二叉树上分支总数 b = n1+2n2 而 b = n-1 = n0 + n1 + n2 - 1由此, n0 = n2 + 1 。

性质 4:

两类特殊的二叉树:

满二叉树:指的是深度为k且含有2k-1个结点的二叉树。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值