![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二叉树
hldfight
微信公众号:小胖的安全之旅
展开
-
有序二叉树
本文使用java写的有序二叉树,所谓有序二叉树,就是左子树上的数值小于树根上的值,树根的值小于右子树的值,创建过程很简单,只需要加上一个判断就可以,至于遍历,前序,中序,后序遍历需要使用栈来完成,于是使用递归的方法,层序遍历则需要使用队列,就是先将树根加到队列,然后每次取出队首元素,输出值,并将左右子树加入队列,循环至队列为空为止。下面是主要代码:import java.util.Li...原创 2018-02-28 16:02:12 · 3953 阅读 · 0 评论 -
区间树(求给定区间是否与已知区间集合相交)
在x数轴上给出众多线段(已知线段起点与终点),求给定一个线段,并查询该线段与上述众多线段中几条线段相交。创建有序二叉树,节点为众多线段,顺序由线段的起点决定,并且每个节点增加一个域存放该节点的子树中能到达的最右端的值。class RangeTree { private int begin; //起点 private int end; //终点 private int m...原创 2018-02-28 18:03:49 · 716 阅读 · 0 评论 -
哈夫曼树
哈夫曼树,经典的一个用例是:在发送一篇文章时,需要将文章的每个字符转存为二进制码,但是为了减少发送的字节数,需要将出现频率高的字符尽量用短的二进制编码表示,为了保证每个字符的二进制码前缀唯一,就可以使用哈弗曼树来构造,代码如下:import java.util.ArrayList;import java.util.Collections;import java.util.Compa...原创 2018-02-28 17:12:20 · 159 阅读 · 0 评论 -
平衡二叉树(AVL树)
平衡二叉树(AVL树),是一种有序树,因为普通的二叉树如果添加的节点有序,查询效率会与数组无异,而AVL树改变了它的弊端,会实时调整树的高度,使它左右子树的树高之差的绝对值不会大于1。下面给出使用java代码完成的AVL树:import java.util.LinkedList;import java.util.Queue;class AVLTree { private int n; ...原创 2018-02-28 16:20:39 · 595 阅读 · 0 评论 -
最短前缀(字典树)
刚学了字典树,找了一道简单的模板题做了一下,下面每行前面部分的字符串是输入的,后面是其最小前缀,下面是要求的输出格式:carbohydrate carbohcart cartcarburetor carbucaramel caracaribou caricarbonic carbonicartilage carticarbon carboncarri原创 2016-07-10 15:47:33 · 713 阅读 · 0 评论 -
实现堆结构
题目如下:描述定义一个数组,初始化为空。在数组上执行两种操作:1、增添1个元素,把1个新的元素放入数组。2、输出并删除数组中最小的数。使用堆结构实现上述功能的高效算法。输入第一行输入一个整数t,代表测试数据的组数。对于每组测试数据,第一行输入一个整数n,代表操作的次数。每次操作首先输入一个整数type。当type=1,增添操作,接着输入一个整原创 2016-07-12 11:59:04 · 1808 阅读 · 0 评论 -
L2-012. 关于堆的判断
题目如下:将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:“x is the root”:x是根结点;“x and y are siblings”:x和y是兄弟结点;“x is the parent of y”:x是y的父结点;“x is a child of y”:x是y的一个子结点。输入格式:原创 2016-07-13 10:47:54 · 2277 阅读 · 0 评论 -
二叉树建立及前序遍历
看了小甲鱼的视频简直收益多多,完全理解了二叉树的建立及遍历代码,递归的能力太强了,以后一定要多多利用递归呀!!#include #include #include #include using namespace std;typedef struct node{ char date; struct node *lchild; struct node *r原创 2016-07-06 11:20:07 · 420 阅读 · 0 评论 -
根据前序与中序遍历建树后以后序遍历输出
参考的别人的代码,用递归先建立左子树,再建立右子树,递归的代码很简练,但是并不好理解,先记为模板,以后回过头来也许也会不一样的发现。#include #include #include using namespace std;struct node{ char key; node *lchild; node *rchild;};//已知前序遍历与原创 2016-07-09 12:45:05 · 910 阅读 · 0 评论 -
根据后序与中序遍历建树层序遍历输出
在我心里只要是二叉树就一定与递归有千丝万缕的关系,因此先递归建立左子树,再递归右子树,像递归这种东西,一定要站在一个高度去看他,如果想的太复杂了会越陷越深,所以写代码是只要给他一个宏观上的指令,就可以了。层序遍历吧,代码很简单,看一遍应该就理解了。#include #include #include #include #include using namespace std原创 2016-07-09 20:11:13 · 639 阅读 · 0 评论 -
简单线段树(求区间的并集)
本文讲述简单的线段树,与我上一篇的区间树解决的问题不同,本题是给定一个大的线段(已知起点与终点),然后再给出众多线段(已知起点与终点),求这众多线段映射到那个大线段上的总长度。解决方案是先将该大线段二分,并将二分后的线段作为节点,创建二叉树。例如,大线段为[2, 10), 则可以创建如下二叉树: ...原创 2018-02-28 19:21:49 · 1588 阅读 · 0 评论