数据结构
qq_41910048
0x01
展开
-
平衡二叉查找树实现(C 实现)
AVL树的简单实现代码。主要理解了左旋、右旋还有双旋就好写了。需要旋转的地方就是插入和删除的时候判断一下balance是不是满足旋转的条件(也就是左右子树不平衡)。在插入子树的时候改变一下父节点的height,从子叶递归上来,最后整条路上节点的height都会修改,也就完成了高度变化。当然在旋转的时候因为节点会往下转,所以不管左旋右旋都需要根据左右子树的高度重新获得height。下面是代码。#include <iostream>#include <string>#d原创 2020-09-25 14:33:48 · 134 阅读 · 0 评论 -
根据前序和中序,重建二叉树
具体的思路就是递归,遍历中序数组,在前序中找相同的。因为前序是"根左右",而中序是’左根右",所以中序中匹配的前序数字的前面所有数字都是该树的左节点,而后面的数字就是该树的右节点这里是主要的逻辑Node node = new Node(preorder[preStart]); for(int i = inStart;i <= inEnd;i++) { ...原创 2020-03-30 20:06:51 · 136 阅读 · 0 评论 -
二叉堆的实现
//写的不太好见谅哈,没用动态数组,所以插入超过max不会扩表#include <stdio.h>#define max 10int a[max]={-1,2,4,6,7,9,12};int currentsize=sizeof(a)/sizeof(a[0]);void insert(int x){ if(currentsize>max){ printf("full...原创 2018-07-07 22:05:17 · 126 阅读 · 0 评论 -
基于简单线段树的RMQ
线段树是擅长处理区间的,是一种类似完美二叉树的数组结构。(完美二叉树是所有叶子深度都相同,并且每个节点要么是叶子节点要么有两个儿子的树)。树上的每个节点都维护一个区间。根维护都是整个区间,每个节点维护的是父亲的区间二等分后的其中一个子区间,对区间对操作可以在O(logn)完成。const int MAX_N = 1<<17;int n,dat[2*MAX_N-1];//...原创 2019-04-03 23:09:32 · 199 阅读 · 0 评论