①树

有n个节点的树有(n-1)条边

树:无环无向图,任意两点之间只有一条边

经过所有边回到原点--哈密尔顿回路

经过所有点回到原点--欧拉回路

中序:父亲在中间,左儿子在左边,左儿子在右边(人脑习惯)

vectora :定义不定长数组

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

未完待续~(如果有dalao有补充欢迎评论补充)

我是千文杜博,记住我呦~~

The end