第1页第六章树和二叉树第2页【学习目标】1.领会树和二叉树的类型定义2.熟记二叉树的主要特性3.熟练掌握二叉树的各种遍历算法4.理解二叉树的线索化5.熟练掌握二叉树和树的各种存储结构6.掌握建立赫夫曼的方法
1树的定义和基本术语树是由n(n≥0)个结点组成的有限集合
若n=0,称为空树;若n>0,则:(1)其中必有一个称为根(root)的特定结点,它没有直接前驱,但有零个或多个直接后继;(2)除根结点以外的其它n-1结点可以划分为m(m≥0)个互不相交的有限集合T0,T1,…,Tm-1,每个集合Ti(i=0,1,…,m-1)又是一棵树,称为根的子树,每棵子树的根结点有且仅有一个直接前驱,但可以有0个或多个直接后继
由此可知,树的定义是一个递归的定义,即树的定义中又用到了树的概念
第4页ADTTree{数据对象D:D是具有相同特性的数据元素的集合
若D为空集,则称为空树
否则:(1)在D中存在唯一的称为根的数据元素root;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每一棵子集本身又是一棵符合本定义的树,称为根root的子树
数据关系R:第5页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())//遍历第6页InitTree(&T)//初始化置空树CreateTree(&T,definition)//按定义构造树Assign(T,cur_e,value)//给当前结点赋值InsertCh