数据结构。
文章平均质量分 64
natsuyu
这个作者很懒,什么都没留下…
展开
-
关于划分树
断断续续看了几天。。。。事实证明这种东西一定要时间集中一点看,不然出活很慢。。。看的时候主要是这么几个问题:第一,为什么这样建树第二,为什么这样查询,区间控制的理由是什么先科普一下基本概念:(转)划分树的定义 划分树定义为,它的每一个节点保存区间[lft,rht]所有元素,元素顺序与原数组(输入)相同,但是,两个子树的元素为该原创 2015-04-06 12:22:18 · 392 阅读 · 0 评论 -
leetcode 208 【trie】
就是trie树模板。。class TrieNode {public: // Initialize your data structure here. TrieNode *next[26]; int have; TrieNode() { for(int i=0;i<26;i++) next[i]=NULL; have=false;原创 2015-06-06 17:34:32 · 369 阅读 · 0 评论 -
leetcode 211 【Trie】
简单trie树应用,在查询的时候如果碰到 '.'的情况,就搜索所有相连的字母,继续查找,只要基于这些相连的字母的查找有一个是有效的,那么就返回true.class WordDictionary {public: class node { public: int have; node *next[26]; node(){h原创 2015-06-06 19:15:32 · 447 阅读 · 0 评论 -
leetcode 110 【判断是否是AVL】
额。。。代码不是很漂亮,递归查看每棵子树是否是平衡树。以当前节点为根的子树是平衡树的条件是左右子树都是平衡树,并且两者的高度差不超过1.原先在纠结怎么一边传树的高度,一边判断是否是AVL。然后发现。。。可以传引用进去!这样每次都可以回溯得到子树的高度,又可以进行判断。/** * Definition for a binary tree node. * struct TreeNode {原创 2015-06-06 22:04:31 · 924 阅读 · 0 评论 -
leetcode 109 【建立BST树】
因为给的数组已经是有序的了,所以就折半建树就好了。应该是。。先序遍历的。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), lef原创 2015-06-09 12:35:56 · 495 阅读 · 0 评论 -
PAT 1064 【建立BST树】
把给定的数组排序,然后按照中序遍历的方法存到数组中。因为可以发现对于BST树中序遍历的结果就是数组的升序。于是用中序遍历的方法建树。#include #include #include using namespace std;#define maxn 1100int n,a[maxn],b[maxn];void create(int node,int &index){原创 2015-06-09 16:08:35 · 647 阅读 · 0 评论 -
leetcode 98 【查询是否是平衡树】
讨厌自己晕晕乎乎的,这么简单的题也debug了好久,之前自己的思路都没有想好,这么简答的逻辑关系也理不清楚,活该做这么久。这几天怨气怎么这么大。。。对于每个节点,需要左子树的最大值,右子树的最小值,及两者是否都是AVL。但是应该记录子树上所有值的最大值,最小值。因为对于该节点的父节点,你不知道他是要最大值,还是最小值。/** * Definition for a binary t原创 2015-06-08 21:15:16 · 511 阅读 · 0 评论 -
leetcode 124 【树直径】
class Solution {public: mapdp1,dp2; int ans; void help(TreeNode*x) { dp1[x]=dp2[x]=x->val; if(x->left) { help(x->left); int tmp=dp1[x->原创 2015-06-09 13:55:10 · 551 阅读 · 0 评论 -
PAT 1066【AVL 建树与维护】
(⊙v⊙)嗯。。。原先一直不知道AVL为什么有的时候要旋两次。。。这下懂啦!AVL详情查看:http://dongxicheng.org/structure/avl/看图比较好懂。恩。自己手算一下就知道为什么插入在左子树的右子树上/左子树是不一样的。还是很好理解的,但是不要光看不动手啊啊啊。然后就是,注意指针也是一个变量,如果把它作为参数放入函数中不带引用的话,那么就算在函数内原创 2015-06-10 17:49:32 · 475 阅读 · 0 评论 -
leetcode 106 【中序,后序建树】
和leetcode 105差不多的。class Solution {public: TreeNode* find(int l,int r,int ll,int rr,vector& inorder, vector& postorder) { if(lr||ll>rr) return NULL; TreeNode *root=new TreeNo原创 2015-06-06 21:21:14 · 316 阅读 · 0 评论 -
leetcode 105【前序,中序建树】
有简洁版的。。可是懒得看。。。。自己写的这个算是模拟手酸过程了吧,恩。感觉碰到这样的例子,就是涉及长度加减的,都要拿小数据测一测。class Solution {public: TreeNode* find(int l,int r,int ll,int rr,vector&preorder,vector&inorder) { if(lr||ll>rr) r原创 2015-06-06 20:49:35 · 583 阅读 · 0 评论 -
HDU 3791 BST 基础
嗯。。比对两棵树是不是一样的……这……………………#include #define maxn 30struct node{ int val; node *l,*r;}cmp[maxn],tree[maxn];void insert(node *rt,node *x){ node *p=rt,*pre; while(p!=NULL) {原创 2015-04-08 15:58:30 · 396 阅读 · 0 评论 -
HDU 3999 BST基础
初学BST树,拿来练练手。题目是你一个序列,叫你求出建同样的树所用的最少字典序的序列。。。。嗯。。应该就是前序了。。。然后。。恩恩。。。。#include #define maxn 100100struct node{ int val; node *left,*right;}tree[maxn];void insert(node *rt,node *x)原创 2015-04-08 15:30:47 · 506 阅读 · 0 评论 -
POJ 3468 【线段树区间更新-成段更新】
给定序列,给M次询问,两种操作,C L,R,X,在[l,r]每个数增加X,Q L,R 询问[l,r]总和。注意两点,在update 和 query的时候都是需要push_down的。然后是,注意每个push_down子树增加的量是vis[rt]不是vis[rt#include //HDU 3468#define llt long long#define maxn 100010l原创 2015-05-20 21:02:21 · 387 阅读 · 0 评论 -
HDU 1698 【线段树区间更新】
之前一直觉得自己线段树敲得很熟练,然后。。。某天。。。是的,就是我的数据结构周开始的时候我发现。。。我特么才会单点更新是怎么回事!只会区间查找是肿么回事!!摔!恩。。。就是表达一下弱渣的心情。。。。区间更新,用到延迟操作。延迟操作应该是这么回事。线段树的优越性就是体现在,第一是二分查找,第二是区间操作。当我们需要多次对区间进行操作的时候,如果每次都更新每个区间内的每个节点,那么线段树的原创 2015-05-20 16:36:35 · 483 阅读 · 0 评论 -
HUFFMAN编码进行压缩---【数据结构】
说到HUFFMAN编码可以用来进行压缩,然后就想试试。拖了一周才开始写。纠结了两天。现在有点样子了,但是。。有BUG。。。有的时候可以有的时候不可以。。。。正在找原因。对文件操作和计算机原理这一块还不是很熟。理一下思路吧。先从一个文件中读取数据,进行频数统计,然后根据统计的频数建立HUFFMAN树。再扫描一遍文件,利用HUFFMAN树进行编码。此处有技巧!因为要进行压缩,所以对于每个字符的原创 2015-05-06 20:00:10 · 781 阅读 · 0 评论 -
POJ 2528 【线段树--离散化,区间覆盖】
这道题想了挺久的。。。。 TAT听说POJ这道题的数据奇弱,所以有一种常见的离散方法也是可以过得,但是有错。转:**********************************************************************给出下面两个简单的例子应该能体现普通离散化的缺陷:例子一:1-10 1-4 5-10例子二:1-10 1-4 6-10普原创 2015-05-21 14:02:54 · 470 阅读 · 0 评论 -
HDU 4514 【非联通无向图判环,树直径】
题目很明显是判环+树直径。然后自己有这么几个坑点。第一是没有搞清楚tarjan判的是有向图是否有环,无向图判环要用并查集。第二是没想到图可能是不连通的,需要循环寻找每棵树进行直径的寻找。第三是在找直径上的dfs上有错。。。恩,然后就是手动扩栈了一下。#pragma comment(linker, "/STACK:102400000,102400000")#include #in原创 2015-06-04 12:38:33 · 692 阅读 · 0 评论 -
leetcode 212 【trie+dfs】
好多bug。。好醉。不知道怎么写题解了。。。应该说就是tire树的应用吧,给你一个map,然后在map中找到存在的指定串。。。但是感觉还有很多的。。地方不能好好优化,因为并不知道这个函数确切的使用情况!!!不开心。。没有数据大小。。。class Solution {public: class node { public: int have;原创 2015-06-06 17:28:31 · 530 阅读 · 0 评论 -
POJ 3468 【线段树复习】
0 0 在刷DP的我不知道为什么点开了一个线段树呢。。。真神奇。。然而一定是输错了题号。。但是蛮做吧,还是有点忘了的。。比如说在add的时候忘了给路过的区间更新QAQ#include #include #include #include using namespace std;#define maxn 100100#define llt long long llt ans;原创 2015-09-10 09:23:40 · 312 阅读 · 0 评论