摘要:
假设一个二叉查找树中的数据都是链式的(即都集中在左子树或者右子树),那么这时候对该二叉查找树进行查找的时间复杂度就是$O(n)$,背离了二叉查找树用来优化数据查询的目的。而平衡二叉树可以使树的高度在每次插入元素后,查询操作仍然能保持$O(logn)$的时间复杂度。 对平衡二叉树的任意结点来说,要保证 阅读全文
摘要:
二叉查找树的特点: 在二叉查找树中左子树上所有结点的数据都小于等于根结点的数据,而右子树上所有结点的数据都大于根结点的数据 //存储结构: struct node { Int data; node *lchild; node *rchild; }; //在建树前根节点不存在: Node *root 阅读全文
摘要:
//树的静态存储结构 struct node { int data; vector child; }Node[Max]; //新建一个结点 int index = 0; // index是结点坐标 int newNode(int v) { Node[index].data = v; Node[ind 阅读全文
摘要:
//二叉树存储结构: struct node { Int data; node *lchild; node *rchild; }; //二叉树在建树前根节点不存在: Node *root = NULL; //新建结点: node *newNode(int v) { node *Node = new 阅读全文
摘要:
汉诺塔问题:有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,求至少需要多少次移动。 我们首先假设n=1,那么move(n)=1,因为这时候只需要从A->C便可以。接下来假 阅读全文
摘要:
手写数组实现队列 int queue[20]; int front,rear; void clear() { front = rear = -1; } int size() { return (rear-front); } bool empty() { if(front==rear) return 阅读全文
摘要:
中缀表达式指的是"1+2-3*4/5"这种其实就是我们通常见到的书写算式顺序,要计算中缀表达式则首先要将字符串转换成后缀表达式并存储在一个队列当中,即1 2 3 4 5 / * - +(空格只是为了隔开方便理解),可以看到数字都集中在了前面,算术符号则集中在后面。然后计算后缀表达式的方式便是从开头遍 阅读全文
摘要:
首先当然要包含algorithm头文件 :#include <algorithm> max(x,y) min(x,y) 参数可以是浮点数 abs(x) x必须是整数 如果x是浮点数则要用math头文件下的fabs(x) swap(x,y) 交换x和y reverse(it,it2) it和it2可以 阅读全文
摘要:
vector vector可以理解成变长数组,即长度根据需要而自动改变的数组 头文件:#include <vector> 定义:vector<typename>name; vector内可以通过下标或者迭代器(iterator)访问(只有vector和string才允许使用v.begin()+3这种 阅读全文
摘要:
这个题目可以作为练习写大/小根堆的实现,不过貌似时间复杂度还是蛮高的。在洛谷上面一道模板题上面好像就超时了几个点,不知道是不是我实现的问题。那么除此之外,最容易想到的方法是先对该数组进行排序,然后取出第K或MAX-K数来。当选择使用快排的时候,时间复杂度是$O(nlogn)$。但还有一种更优的方法是 阅读全文