【数据结构】二叉树概述
2017-07-16 10:35
232 查看
1.树的定义
树( Tree’ )是n(n~O) 个结点的有限集。n=O 时称为空树。在任意-棵非空树中: ( 1 )有且仅有-个特定的称为根( Root )的结点: (2) 当n>1 时,其余结点可分为m (m>O) 个互不相变的有限集T1 、T2、……、Tm . 奠中每一个集合本身又是一槐树,并且称为根的子树( SubTree )
节点分类
结点拥有的子树数称为结点的度(Degree) 。
度为0 的结点称为叶结点(Leaf) 或终端结点;度不为0 的结点称为非终端结点或分支结点。
树的度是树内各结点的度的最大值。
2.树的概念
(1)深度:树中结点的最大层次称为树的深度( Dep也)或高度
(2)树的存储结构
双亲表示法
孩子表示法
孩子兄弟表示法
3.二叉树的定义
二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”,左子树和右子树同时也是二叉树。二叉树的子树有左右之分,并且次序不能任意颠倒。二叉树是递归定义的,所以一般二叉树的相关题目也都可以使用递归的思想来解决,当然也有一些可以使用非递归的思想解决,我下面列出的一些算法有些采用了递归,有些是非递归的。
4.二叉树的分类
(1)满二叉树
除叶子节点外,所有节点的度都为2
(2)完全二叉树
叶子结点只能出现在最下两层。
最下层的叶子一定集中在左部连续位置。
倒数二层,若有叶子结点,一定都在右部连续位置。
如果结点度为1 ,则该结点只有左孩子,即不存在只有右子树的情况。
同样结点数的二叉树,完全二叉树的深度最小。
5.二叉树的性质
二叉树中,第i层的节点最多有2(i-1)个。
深度为k的二叉树最多有2k-1个节点。
二叉树中,叶子节点树为N1个,度为2的节点有N2个,那么N1=N2+1。
具有N个结点的二叉树深度为(Log2 N)+1层。
N个结点的完全二叉树如何用顺序存储,对于其中的一个结点i,存在以下关系,
2*i是结点i的父结点。
i/2是结点i的左孩子。
(i/2)+1是结点i的右孩子。
6.哈夫曼树
(1)定义
哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树
(2)构建哈夫曼树
1>将所有左,右子树都为空的作为根节点。
2>在森林中选出两棵根节点的权值最小的树作为一棵新树的左,右子树,且置新树的附加根节点的权值为其左,右子树上根节点的权值之和。注意,左子树的权值应小于右子树的权值。
3>森林中删除这两棵树,同时把新树加入到森林中。
4>重复2,3步骤,直到森林中只有一棵树为止,此树便是哈夫曼树
本人才疏学浅,若有错请指出
谢谢!
树( Tree’ )是n(n~O) 个结点的有限集。n=O 时称为空树。在任意-棵非空树中: ( 1 )有且仅有-个特定的称为根( Root )的结点: (2) 当n>1 时,其余结点可分为m (m>O) 个互不相变的有限集T1 、T2、……、Tm . 奠中每一个集合本身又是一槐树,并且称为根的子树( SubTree )
节点分类
结点拥有的子树数称为结点的度(Degree) 。
度为0 的结点称为叶结点(Leaf) 或终端结点;度不为0 的结点称为非终端结点或分支结点。
树的度是树内各结点的度的最大值。
2.树的概念
(1)深度:树中结点的最大层次称为树的深度( Dep也)或高度
(2)树的存储结构
双亲表示法
孩子表示法
孩子兄弟表示法
3.二叉树的定义
二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”,左子树和右子树同时也是二叉树。二叉树的子树有左右之分,并且次序不能任意颠倒。二叉树是递归定义的,所以一般二叉树的相关题目也都可以使用递归的思想来解决,当然也有一些可以使用非递归的思想解决,我下面列出的一些算法有些采用了递归,有些是非递归的。
4.二叉树的分类
(1)满二叉树
除叶子节点外,所有节点的度都为2
(2)完全二叉树
叶子结点只能出现在最下两层。
最下层的叶子一定集中在左部连续位置。
倒数二层,若有叶子结点,一定都在右部连续位置。
如果结点度为1 ,则该结点只有左孩子,即不存在只有右子树的情况。
同样结点数的二叉树,完全二叉树的深度最小。
5.二叉树的性质
二叉树中,第i层的节点最多有2(i-1)个。
深度为k的二叉树最多有2k-1个节点。
二叉树中,叶子节点树为N1个,度为2的节点有N2个,那么N1=N2+1。
具有N个结点的二叉树深度为(Log2 N)+1层。
N个结点的完全二叉树如何用顺序存储,对于其中的一个结点i,存在以下关系,
2*i是结点i的父结点。
i/2是结点i的左孩子。
(i/2)+1是结点i的右孩子。
6.哈夫曼树
(1)定义
哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树
(2)构建哈夫曼树
1>将所有左,右子树都为空的作为根节点。
2>在森林中选出两棵根节点的权值最小的树作为一棵新树的左,右子树,且置新树的附加根节点的权值为其左,右子树上根节点的权值之和。注意,左子树的权值应小于右子树的权值。
3>森林中删除这两棵树,同时把新树加入到森林中。
4>重复2,3步骤,直到森林中只有一棵树为止,此树便是哈夫曼树
本人才疏学浅,若有错请指出
谢谢!
相关文章推荐
- 数据结构——二叉树概述及其数组(顺序存储)表达法
- 【郝斌数据结构自学笔记】70-74_已知两种遍历序列求原始二叉树概述_已知先序和中序求后序_已知中序和后序求先序_树的应用简单介绍
- 数据结构 二叉树 索引链表 及其索引话 输出
- 微软等数据结构+算法面试100题(5)--怎样编写一个程序,把一个有序整数数组放到二叉树中
- 数据结构学习:利用链表建立二叉树
- 数据结构 二叉树及遍历二叉树
- 数据结构第十三周项目2--二叉树排序树中查找的路径
- [数据结构]C语言二叉树的实现
- 数据结构学习笔记7——二叉树介绍
- 2015年大二上-数据结构-树和二叉树-2-(5)哈夫曼编码
- 【数据结构】---二叉树有关的面试题
- 【数据结构】二叉树四种遍历的非递归算法
- (2)Java数据结构--二叉树 -和排序算法实现
- 【数据结构】链式二叉树
- 基本数据结构:建立二叉树 和 二叉树的顺序遍历
- 重写数据结构--二叉树
- 【数据结构和算法】之二叉树的java实现
- 数据结构-----创建/递归非递归遍历二叉树
- 数据结构 — 二叉树的基本操作(递归实现)
- 数据结构例程——二叉树的构造