数据结构--树型结构
zisuu
这个作者很懒,什么都没留下…
展开
-
树--哈夫曼编码--最小堆原生版本和STL版本
输入样本: 7 A 1 B 1 C 1 D 3 E 3 F 6 G 6 4 A 00000 B 00001 C 0001 D 001 E 01 F 10 G 11 A 01010 B 01011 C 0100 D 011 E 10 F 11 G 00 A 000 B 001 C 010 D 011 E 100 F 101 G 110 A 00000 B 00001 C 0001 D 001 E...原创 2020-04-15 22:02:22 · 222 阅读 · 0 评论 -
树--利用最小堆建立哈夫曼树
1定义 构建 1每次把权值最小的两颗二叉树合并,最后即可构建哈夫曼树 2可以利用最小堆来实现,只不过现在存放的是根节点,不是普通的int,char类型的数据 #include<bits/stdc++.h> using namespace std; struct Haff{ int data; Haff *left; Haff *right; }; typedef Haff * ...原创 2020-04-14 19:40:22 · 606 阅读 · 0 评论 -
应用--堆的建立,调整
什么是堆 两个特性 结构性:用数组表示的完全二叉树 有序性:任一结点的关键字是其子树所有结点的最大值(或最小值) “最大堆(MaxHeap)”,也称"大顶堆":最大值 最小堆(MinHeap)”,也称"小顶堆":最小值 构建最大堆: 建立堆的主要函数 存储结构体: struct node{ int *data; int size; }; 1 create() 初...原创 2020-04-13 20:37:27 · 288 阅读 · 0 评论 -
树--平衡二叉树(AVL)
为什么需要AVL树 二叉搜索树的搜索效率与其树的深度相关,而二叉搜索树的组成又与其插入序列相关,在极端情况下,二叉搜索树退化为一条单链(比如插入序列是 1 2 3 … n),使得搜索效率大大降低,为了避免这种情况出现,我们采用二叉平衡树对插入结点进行调整,使得树的深度尽可能小 定义 平衡因子 BF(T)=hL-hR hL和hR分别为左子树和右子树的高度 平衡二叉树 左右子树高度之差不超过1...原创 2020-04-12 20:51:21 · 89 阅读 · 0 评论 -
树--二叉搜索树(bst)
二叉搜索树 定义 二叉搜索树(BST)也称二叉排序树或二叉查找树 二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质: 非空左子树的所有键值小于其根结点的键值 非空右子树的所有键值大于其根结点的键值 左、右子树都是二叉搜索树 特殊函数 BinTree Find(ElementType X,BinTree BST):从二叉搜索树 BST 中查找元素 X,返回其所在结点地址 Bin...原创 2020-04-12 20:12:47 · 111 阅读 · 0 评论 -
树的表示方法
1双亲表示法: 双亲表示法 取一块连续的内存空间,在存储每个结点的同时,各自都附加一个记录其父结点位置的变量。 在树结构中,除了树根外,每个结点都只有一个父结点(又叫“双亲结点”) struct node{ int e; int parent; }; struct tree{ node a[100]; int size; }; void init(tree *&root){ ...原创 2020-04-10 21:13:56 · 1774 阅读 · 0 评论 -
树--线索二叉树的建立及其遍历
0线索二叉树的存储结构体: 1先序序列化: 先序构树思想: 对于先序线索二叉树,我想提醒的是:每次只会把当前节点的左子树前驱链上, 这一次的 后继 不会在本次链上,当pCur指向下一个节点的时候, 才会把上一次的后继链上 代码: 先序线索化: 先序遍历的思想: 先往左遍历一遍,到底了之后往后继节点或者右子树找(要先判断是右子树还是线索节点) #include<bits/stdc++.h&...原创 2020-04-08 16:11:42 · 245 阅读 · 0 评论 -
树--二叉树的遍历
1二叉树的递归遍历: 给定中序和后序序列,建立先序序列 #include<bits/stdc++.h> using namespace std; /* 8 7 8 11 3 5 16 12 18 8 3 11 7 16 18 12 5 3 */ int lchild[10000]={0}; int rchild[10000]={0}; int mid[10000]={0}; int a...原创 2020-04-07 21:54:46 · 285 阅读 · 0 评论