数据结构基础攻略——树(Tree)
2013-04-22 19:42
260 查看
1.基本概念
1)树中结点的最大层次称为树的深度(Depth)或高度。
2)结点拥有的子树树称为结点的度(Degree);度为0的结点称为叶结点(Leaf)或终端结点;度不为0的结点称为非终端结点或分支结点。树的度是树内各结点的度的最大值。
3)从树中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目称作路径长度;树的路径长度就是从树根到每一结点的路径长度之和。
4)若要设计长度不等的编码,则必须是任一 字符的编码都不是另一个字符的编码的前缀,这种编码称作前缀编码。
2.树的存储结构
1)双亲表示法
结点由data、parent两个域组成,data是数据域,parent是指针域,存储该结点的双亲结点在数组中的下标。
2)孩子表示法
结点由data、child1、child2、……、childn共n+1个域组成,data是数据域,childi(i=1,……,n)是指针域,存储该结点的孩子结点在数组中的下标。
3)孩子兄弟表示法
结点由data、firstchild和rightsib三个域组成,data是数据域,firstchild是指针域,指向第一个孩子结点,rightsib是指针域,指向右兄弟结点。
3二叉树(Binary Tree)
二叉树的五种基本形态:空二叉树、只有一个根结点、根结点只有左子树、根结点只有右子树、根结点既有左子树又有右子树。特殊二叉树:斜树、满二叉树、完全二叉树。
1)二叉树的性质
a)在二叉树的第i层上至多有2i-1个结点(i≥1);
b)深度为k的二叉树至多有2k个结点(k≥1);
c)对任何一颗二叉树T,如果其叶子结点树为n0,度为2的节点数为n2,则n0= n2-1;
d)具有n个结点的完全二叉树的深度为[log2n]+1;
2)二叉树的存储结构
a)二叉树顺序存储结构
用一维数组存储二叉树中的结点,并且结点的存储位置,就是数组的下标要能体现结点之间的逻辑关系。
b)二叉链表
结点由data、lchild、rchild三个域组成,data是数据域,lchild、rchild是指针域,分别指向左孩子和右孩子。
4.遍历二叉树(Traversing BinaryTree)
从根结点出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点被访问一次且仅被访问一次。
1)前序遍历(Preordertraversal)
若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。
2)中序遍历(Inordertraversal)
若二叉树为空,则空操作返回,否则从根结点开始,中序遍历根结点左子树,然后再访问根结点,最后中序遍历右子树。
3)后序遍历(Postordertraversal)
若二叉树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点。
4)层序遍历
若二叉树为空,则空操作返回,否则从树德第一层,也就是从根结点开始访问,从上而下逐层遍历,在同一层中,按从左往右的顺序对结点逐个访问。
5赫夫曼树(Huffman Tree)
带权路径长度WPL最小的二叉树称为赫夫曼树。
1)赫夫曼树算法描述:
假设有n个权值(w1、w2、…、wn),则构造出的哈夫曼树有n个叶子结点,则哈夫曼树的构造规则为:
a) 根据n个权值构造出 n 棵二叉树集合T(每棵二叉树仅有一个根结点);
b) 在T中选出两个根结点的权值最小的二叉树ltree、rtree分别作为左、右子树合并为一棵新的二叉树newtree,且newtree的根结点权值设置为其左、右子树根结点权值之和;
c)从T中删除ltree、rtree,并将newtree加入T;
d)重复(2)、(3)步,直到T中只剩一棵树为止,该树即为所求得的哈夫曼树。
2)赫夫曼编码
为使不等长编码为前缀编码,可用字符集中的每个字符作为叶子结点生成一棵编码二叉树,为了获得传送报文的最短长度,可将每个字符的出现频率作为字符结点的权值赋予该结点上,显然字符使用频率越小权值越小,权值越小叶子就越靠下,于是频率小编码长,频率高编码短,这样就保证了此树的最小带权路径长度效果上就是传送报文的最短长度。因此,求传送报文的最短长度问题转化为求由字符集中的所有字符作为叶子结点,由字符出现频率作为其权值所产生的哈夫曼树的问题。利用哈夫曼树来设计二进制的前缀编码,既满足前缀编码的条件,又保证报文编码总长最短。
原文转载出处:http://50vip.com/blog.php?i=197
950c
1)树中结点的最大层次称为树的深度(Depth)或高度。
2)结点拥有的子树树称为结点的度(Degree);度为0的结点称为叶结点(Leaf)或终端结点;度不为0的结点称为非终端结点或分支结点。树的度是树内各结点的度的最大值。
3)从树中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目称作路径长度;树的路径长度就是从树根到每一结点的路径长度之和。
4)若要设计长度不等的编码,则必须是任一 字符的编码都不是另一个字符的编码的前缀,这种编码称作前缀编码。
2.树的存储结构
1)双亲表示法
结点由data、parent两个域组成,data是数据域,parent是指针域,存储该结点的双亲结点在数组中的下标。
2)孩子表示法
结点由data、child1、child2、……、childn共n+1个域组成,data是数据域,childi(i=1,……,n)是指针域,存储该结点的孩子结点在数组中的下标。
3)孩子兄弟表示法
结点由data、firstchild和rightsib三个域组成,data是数据域,firstchild是指针域,指向第一个孩子结点,rightsib是指针域,指向右兄弟结点。
3二叉树(Binary Tree)
二叉树的五种基本形态:空二叉树、只有一个根结点、根结点只有左子树、根结点只有右子树、根结点既有左子树又有右子树。特殊二叉树:斜树、满二叉树、完全二叉树。
1)二叉树的性质
a)在二叉树的第i层上至多有2i-1个结点(i≥1);
b)深度为k的二叉树至多有2k个结点(k≥1);
c)对任何一颗二叉树T,如果其叶子结点树为n0,度为2的节点数为n2,则n0= n2-1;
d)具有n个结点的完全二叉树的深度为[log2n]+1;
2)二叉树的存储结构
a)二叉树顺序存储结构
用一维数组存储二叉树中的结点,并且结点的存储位置,就是数组的下标要能体现结点之间的逻辑关系。
b)二叉链表
结点由data、lchild、rchild三个域组成,data是数据域,lchild、rchild是指针域,分别指向左孩子和右孩子。
4.遍历二叉树(Traversing BinaryTree)
从根结点出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点被访问一次且仅被访问一次。
1)前序遍历(Preordertraversal)
若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。
2)中序遍历(Inordertraversal)
若二叉树为空,则空操作返回,否则从根结点开始,中序遍历根结点左子树,然后再访问根结点,最后中序遍历右子树。
3)后序遍历(Postordertraversal)
若二叉树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点。
4)层序遍历
若二叉树为空,则空操作返回,否则从树德第一层,也就是从根结点开始访问,从上而下逐层遍历,在同一层中,按从左往右的顺序对结点逐个访问。
5赫夫曼树(Huffman Tree)
带权路径长度WPL最小的二叉树称为赫夫曼树。
1)赫夫曼树算法描述:
假设有n个权值(w1、w2、…、wn),则构造出的哈夫曼树有n个叶子结点,则哈夫曼树的构造规则为:
a) 根据n个权值构造出 n 棵二叉树集合T(每棵二叉树仅有一个根结点);
b) 在T中选出两个根结点的权值最小的二叉树ltree、rtree分别作为左、右子树合并为一棵新的二叉树newtree,且newtree的根结点权值设置为其左、右子树根结点权值之和;
c)从T中删除ltree、rtree,并将newtree加入T;
d)重复(2)、(3)步,直到T中只剩一棵树为止,该树即为所求得的哈夫曼树。
2)赫夫曼编码
为使不等长编码为前缀编码,可用字符集中的每个字符作为叶子结点生成一棵编码二叉树,为了获得传送报文的最短长度,可将每个字符的出现频率作为字符结点的权值赋予该结点上,显然字符使用频率越小权值越小,权值越小叶子就越靠下,于是频率小编码长,频率高编码短,这样就保证了此树的最小带权路径长度效果上就是传送报文的最短长度。因此,求传送报文的最短长度问题转化为求由字符集中的所有字符作为叶子结点,由字符出现频率作为其权值所产生的哈夫曼树的问题。利用哈夫曼树来设计二进制的前缀编码,既满足前缀编码的条件,又保证报文编码总长最短。
原文转载出处:http://50vip.com/blog.php?i=197
950c
相关文章推荐
- 数据结构基础 — Root of AVL Tree
- 中国大学MOOC-数据结构基础习题集、04-1、Root of AVL Tree
- 数据结构基础---Binary Search Tree
- 【数据结构与算法基础】二叉查找树 / Binary Search Tree
- 数据结构基础— Tree Traversals Again
- 【数据结构与算法基础】AVL树 / AVL Tree
- 索引基础——B-Tree、B+Tree、红黑树、B*Tree数据结构
- 数据结构基础5.5:哈夫曼树(HuffmanTree)的构造
- 中国大学MOOC-数据结构基础习题集、03-3、Tree Traversals Again
- 数据结构基础系列——链栈的实现
- 数据结构基础之串
- 基础数据结构之图二
- 数据结构基础之图的种类
- 数据结构之Tree
- Java面试宝典之数据结构基础 —— 线性表篇
- 数据结构基础— List Leaves
- 数据结构基础(1) --Swap & Bubble-Sort & Select-Sort
- 数据结构基础之队列
- 数据结构基础算法整理归纳:冒泡排序(二)
- 算法:C语言实现 (第1-4部分)基础知识、数据结构……