①树
有n个节点的树有(n-1)条边
树:无环无向图,任意两点之间只有一条边
经过所有边回到原点--哈密尔顿回路
经过所有点回到原点--欧拉回路
中序:父亲在中间,左儿子在左边,左儿子在右边(人脑习惯)
vector
a.push_back :加入元素
a.size() :获取元素个数
二叉树:每个节点最多有两个子树的树。
完全二叉树:一棵深度为h的二叉树,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就 是完全二叉树。
满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子 结点的二叉树。
生成哈夫曼树
将权值从大到小排序
取2个数做子节点,建一个空白父节点
将新建的树放回序列
重复步骤2
FBI树
B:只有0的
I:只有1的
F:其他的j
②图
堆就是完全二叉树。
最大堆:根结点的键值是所有堆结点键值中最大者的堆。
最小堆:根结点的键值是所有堆结点键值中最小者的堆。
最小堆排序
#include<bits/stdc++.h>
using namespace std;
int n;
int heap[11]={0,1,8,2,11,12,4,6};
int ans[8];
void d(int i)
{
int t;
while(i*2<=n)
{
t=i;
if(heap[2*i]<heap[i])
{
t=2*i;
}
else
{
t=i;
}
if(2*i+1<=n)
{
if(heap[2*i+1]<heap[t])
{
t=2*i+1;
}
}
if(t!=i)
{
swap(heap[t],heap[i]);
i=t;
}
else
break;
}
return;
}
int main()
{
heap[1]=10;
n=7;
d(1);
int k = 0;
while(n>0)
{
k++;
ans[k] = heap[1];
heap[1] = heap[n];
n--;
d(1);
}
for(int i=1;i<=7;i++)
{
cout<<ans[i]<<" ";
}
return 0;
}
正确结果:2 4 6 8 10 11 12
③其他
queue->队列
位运算
x>>1 除以2
x<<1 乘以2
可以用来计算x的n次方
pow函数
power :求冥
pow(x,y) :求x的y次方
floor(x)向下取整,返回一个<=x的int整型。
ceil(x)向上取整,返回一个>=x的int整型。
用一个数据和数据的关系,通过图和线段之间的关系来表示。
前提条件:BFS