270 likes | 459 Views
第六章 树和二叉树. 一、树. 树的 ADT 定义 从关系约束的角度定义树 以递归形式定义树 相关术语 根结点 - 叶结点 - 非叶结点 父结点 - 子结点 祖先结点 - 子孙结点 结点的度 - 树的度 路径 - 路径长度 有向树 - 无向树 结点的层数 树的深度. 二、二叉树. 二叉树的定义 度不大于 2 的有向树称为二叉树。 相关术语 左子结点 - 右子结点. 二、二叉树. 二叉树的性质. 第 i 层最多有 2 i 个结点. 深度为 h ,则最少有 h 个结点,最多有 2 h -1 个结点.
E N D
一、树 • 树的ADT定义 • 从关系约束的角度定义树 • 以递归形式定义树 • 相关术语 • 根结点-叶结点-非叶结点 • 父结点-子结点 • 祖先结点-子孙结点 • 结点的度-树的度 • 路径-路径长度 • 有向树-无向树 • 结点的层数 • 树的深度
二、二叉树 • 二叉树的定义 • 度不大于2的有向树称为二叉树。 • 相关术语 • 左子结点-右子结点
二、二叉树 • 二叉树的性质 第i层最多有2i个结点 深度为h,则最少有h个结点,最多有2h-1个结点 结点数为n,则深度最多为n,最少为┌log(n+1)┐ 满二叉树 完全二叉树
二、二叉树 • 二叉树的性质 对完全二叉树,结点i的左子结点序号为2i+1 对完全二叉树,结点i的右子结点序号为2i+2 对完全二叉树,结点i的父结点序号为└(i-1)/2┘
二、二叉树 • 二叉树的实现 • 二叉链结构 • 父链结构 • 三叉链结构 CODING
二、二叉树 • 二叉树的遍历 • 前序遍历:根 左子 右子 • 中序遍历:左子 根 右子 • 后序遍历:左子 右子 根 • 层次遍历:逐层 abdcegjkhfi dbajgkehcfi dbjkgheifca abcdefghijk CODING
二、二叉树 • 二叉树的遍历 • 应用举例:遍历与输入二叉树 abd###ceg##h##f#i## CODING
二、二叉树 • 二叉树的遍历 • 应用举例:二叉树的撤销 CODING
二、二叉树 • 二叉树的遍历 • 遍历序与二叉树的对应 • 前序遍历序+中序遍历序唯一确定二叉树 前序遍历序:abdceghfi 中序遍历序:dbagehcfi
二、二叉树 • 线索化二叉树 • 定义
二、二叉树 • 线索化二叉树 • 中序线索化二叉树的遍历 • 二叉树的中序线索化 CODING
二、二叉树 • 二叉树应用举例 • 表达式运算树 A+(B*(C-D))/E-F*(G+H)
三、森林、树、二叉树 • 树的物理结构 • 父链结构 • 子链结构 • 子链-兄弟链结构
三、森林、树、二叉树 • 树与森林 • 树=根+子树森林
三、森林、树、二叉树 • 树的二叉树表示 • 树二叉树 • 二叉树树 BiTree=(root, Tl, Tr) Tree=(root, T1, …, Tn)
三、森林、树、二叉树 • 森林与二叉树 • 森林二叉树 • 二叉树森林 BiTree=(root, Tl, Tr) Forest=(T1, …, Tn)=((root,T11,…,T1m),…Tn)
四、哈夫曼树 • 哈夫曼树(最优二叉树) • 叶结点带权的二叉树 树的总权值:50*2+12*3+25*4+8*2+7*3+32*3 = 369
四、哈夫曼树 • 哈夫曼树(最优二叉树) • 哈夫曼树
四、哈夫曼树 • 哈夫曼算法 初始时,将每个叶结点看作一个独立的二叉树,叶结点即根结点; 重复n-1次: 选出两棵根结点权值最小的二叉树; 新增一个根结点; 将选出的两棵二叉树作为新增根结点的左子和右子; 新增根结点的权值为选出两棵二叉树根结点的权值之和; CODING
四、哈夫曼树 • 哈夫曼编码 • 定长编码与变长编码 • 最优变长编码——哈夫曼编码 a:100 b:110 c:111 d:101 e:0 CODING
发送方 接收方 四、哈夫曼树 • 哈夫曼编码 • 编码构造 • 信息编码 • 信息解码 a:100 b:110 c:111 d:101 e:0 aebaeceddec aebaeceddec 1000110100011101011010111