树和二叉树

树和二叉树

树的表现形式

  • 倒悬树
  • 嵌套集合
  • 广义表形式
  • 凹入法表示显示

树的抽象数据类型定义

ADT Tree{
数据对象D:D是具有相同特性的数据元素的集合。
数据关系R:若D为空集,则称为空树;若D仅含有一个数据元素,则R为空集,否则R={H},H是如下二元关系:1若D中存在唯一的称为根的数据元素root,它在关系H下无前驱; (2) 若D-{root}≠NULL,则存在D-{root}的一个划分D1,D2,D3, „,Dm(m>0),对于任意j≠k(1≤j,k≤m)有Dj∩Dk=NULL,且对任意的i(1≤i≤m),唯一存在数据元素xi∈Di有<、root,xi>∈H;(3) 对应于D-{root}的划分,H-{<\root,xi>,„,<\root,xm>}有唯一的一个划分H1,H2,„,Hm(m>0),对任意j≠k(1≤j,k≤m)有Hj∩Hk=NULL,且对任意i(1≤i≤m),Hi是Di上的二元关系,(Di,{Hi})是一棵符合本定义的树,称为根root的子树。
基本操作P:
InitTree(&T);
操作结果:构造空树T.
DestroyTree(&T);
初始条件:树T存在。
操作结果:销毁树T.
CreateTree(&T,definition);
操作条件:definition给出树T的定义。
操作结果:按definition构造树T.
ClearTree(&T);
初始条件:树T存在;
操作结果:将树T清为空树。
TreeEmpty(T);
初始条件:树T存在。
操作结果:若T为空树,则返回TRUE,否则返回FALSE.
TreeDepth(T);
初始条件:树T存在。
操作结果:返回T的深度。
Root(T);
初始条件:树T存在。
操作结果:返回T的根。
Value(T,cur_e);
初始条件:树T存在,cur_e是T中某个节点。
操作结果:返回cur_e的值。
Assign(T,cur_e,value)
初始条件:树T存在,cur_e是T中某个节点。
操作结果:结点cur_E赋值为value.
Parent(T,cur_e)
初始条件:树T存在,cur_e是T中某个节点。
操作结果:若cur_e是T的非根节点,则返回它的双亲,否则函数值为空。
LeftChild(T,cur_e)
初始条件:树T存在,cur_e是T中某个节点。
操作结果:若cur_e是T的非叶结点,则返回它的最左孩子,否则返回空。
RightSibling(T,cur_e);
初始条件:树T存在,cur_e是T中某个结点。
操作结果:如cur_e有右兄弟,则返回它的右兄弟,否则返回空。
InsertChild(&T,&p,I,c)
初始条件:树T存在,p指向T中某个结点,1

二叉树的存储结构

  • 顺序存储结构
  • 链式存储结构
    • 二叉链表节点
    • 三叉链表节点

二叉树的遍历

  • 先序遍历
  • 中序遍历
  • 后序遍历

线索二叉树

树的存储结构

  • 顺序存储结构(双亲表示法)
  • 孩子链表示法
    • 定长节点结构
    • 不定长节点结构
    • 复合链表结构
  • 孩子兄弟表示法(二叉树表示法)

森林和二叉树的转换

树和森林的遍历

  • 先序遍历
  • 后序遍历

赫夫曼树及其应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值