数据结构笔记——树

树(Tree)##

——2017.12.22

一、 查找

1. 顺序查找

a) 建立哨兵

2. 二分法查找(Binary Search)

a) 有序连续储存在数组

b) 边界错位 If(left>right)查找失败

c) 时间复杂度logN

二、 二分查找判定树

1. 判定树上每个结点需要查找次数刚好为该结点所在层数
2. 查找成功时查找次数不会超过判定树的深度
3. ASL(平均查找次数)ASL=(该层个数*该层查找次数)/总元素个数

三、 树的定义

1. N个结点构成的有限集合,当n=0,称为空树
2. 非空数具有以下性质

a) 树中有个称为根的特殊结点,用r表示

3. 子树是不相交,除了根结点外,每个结点有且仅有一个父结点,一课N个结点的树有N-1条边

四、 树的一些基本术语


五、 树的表示方法

1. 链表
2. 儿子兄弟表示法

六、 二叉树的定义

1. 二叉树的子树有左右顺序之分
2. 特殊二叉树:

a) 斜二叉树

b) 完美二叉树/满二叉树

c) 完全二叉树

七、 二叉树的几个重要性质

1. 一个二叉树第i层最多结点数:2的i-1次,
2. 深度为k的二叉树有最大结点总数为:2的k次-1
3. 利用边列等式n0为叶,n1为度为一的结点,n2为度为二的结点

八、 二叉树的操作

1. 操作集:

a) 判断是否为空

b) 遍历(按某个顺序访问每个结点)

c) 创建一个二叉树

2. 常用的遍历方法

a) 先序遍历(PreOrder)——根、左子树、右子树

b) 中序遍历(InOrder)——左子树、根、右子树

c) 后序遍历(PostOrder)——左子树、右子树、根

d) 层次遍历(LevelOrder)——从上到下,从左到右

九、 二叉树的存储结构

1. 顺序存储结构

2. 链表存储

十、 二叉树的遍历

1. 先序遍历

2. 中序遍历

3. 后序遍历

4. 先序遍历 中序遍历 后序遍历过程中所经过的结点路线一样,只是访问各结点的时机不同
5. 二叉树的非递归遍历

a) 非递归遍历算法,基本思路:使用堆栈

6. 层序遍历

a) 二叉树遍历的核心问题:二维结构的线性化

十一、二叉搜索树

1. 左小右大

十二、平衡二叉树

1. 平衡因子(balance factor,简称BF)BF(T)=左子树高度-右子树高度差
2. 任意结点左右子树高度差的绝对值不超过1
3. 平衡二叉树的最小结点数
4. 平衡二叉树的调整

a) 右单旋(RR旋转)——麻烦结点是发现者的右子树的右子树

b) 左单旋(LL旋转)——麻烦结点是发现者的左子树的左子树

c) 左右旋转——麻烦结点是发现者的左子树的右子树

d) 右左旋转——麻烦结点是发现者的右子树的右=左子树

十二、哈弗曼树与哈弗曼编码

1. 什么是哈弗曼树/最优二叉树(Huffman Tree)

a) 最小带权路径长度(WPL)的二叉树

2. 哈弗曼树的构造

a) 每次把权值最小的两颗二叉树合并

3. 哈弗曼树的特点

a) 没有度为1的结点

b) N个椰子结点的哈弗曼树共有2n-1个结点

c) 哈弗曼树的任意非叶结点的左右子树交换后仍是哈弗曼树

4. 哈夫曼编码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值