![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树与二叉树
不想WA
记录我的学习笔记呀
展开
-
堆排序
堆排序 堆的介绍 堆是一个数组,它可以被看成一个近似的完全二叉树。树上的每一个结点对应数组中的一个元素。同时,除了最底层外,该树是完全充满的,而且是从左向右填充 最大堆与最小堆 二叉堆分为两种,即最大堆与最小堆。在最大堆中,最大堆性质是指除了根以外的所有结点i都要满足:A[PARENT(i)] >= A[i],即除根结点外的每个结点都大于或等于其子结点,下图则为一个最大堆。(图源自《算法导论》) 而最小堆则与之相反。 最大堆的维护 维护最大堆,即判断某个结点是否符合最大堆的性质,如若不符合,通过将其与原创 2020-10-15 18:24:57 · 972 阅读 · 0 评论 -
通过顺序储存和链式储存构造二叉排序树
二叉排序树的定义不再叙述,主要介绍方法与代码。 这里要求构造二叉排序树后输入其中序遍历(可得到从小到大的排列) 核心算法:用递归或循环使小于结点的往左边放置 先介绍通过顺序储存的方法 代码如下: #include<stdio.h> #include<string.h> #define maxn 1005000 int d[maxn];//存所有数据 int dl[maxn]...原创 2020-02-25 20:04:08 · 1060 阅读 · 0 评论 -
二叉树遍历问题
直奔主题 这里是原题 二叉树遍历 概括一下就是 给出了一个二叉树的前序遍历和中序遍历所得到的字符 我们则要输出这个二叉树的后序遍历 首先我们要根据给出的前序遍历和中序遍历构造出这个二叉树,接下来再用一个读出后序遍历的函数即可。 首先,构造二叉树用到递归的方法 例如数据 :ABCDEFG;DCBAEFG 根据前序遍历和中序遍历的特点,A肯定为根结点,接着在中序遍历中找到A,中序遍历中A左边的即为...原创 2020-02-13 15:17:05 · 234 阅读 · 0 评论 -
最小堆的建立及堆排序
堆的建立 堆在很多方面都有运用,这里写一下将一个完全二叉树用一维数组保存后再转化为一个最小堆 代码如下(假如树中的数据都为整数) #include<stdio.h> int a[50]; int n; void swap(int p,int q){//交换函数 int tmp; tmp=a[p]; a[p]=a[q]; a[q]=tmp; } void siftdown(int...原创 2020-02-02 17:51:29 · 935 阅读 · 0 评论