度与结点计算

树的度=树内各结点的度的最大值

结点的度=子结点数=结点的边数

总结点数=边数+1

例:已知一棵度为4的树中,其度为0、1、2、3的结点数分别为14、4、3、2,求该树的结点总数n?度为4的结点数?

设度为4的结点数为x,(14+4+3+2)+x = (1*4+2*3+3*2+4*x)+1,得x=2,(14+4+3+2)+2=25

 

二叉树:

结点数n=n0+n1+n2(ni:度为i的结点数)

非空二叉树,n0=n2+1;

第i层上,至多有2i-1(i>=0)个结点(层结点数)

深度为k,至多有2k-1(k>=1)个结点(总结点数)

 

满二叉树:深度为k,有2k-1(k>=1)个结点(总结点数)

完全二叉树:总结点数n,深度h

2h-1<=n<2h  -->  h=floor(log2n)+1

 编号为i的结点父编号为floor(i/2)

 

二叉链表和三叉链表

lChild-data-rChild

lChild-data-parent-rChild

结点数为n,n0=n2+1,得:空链域数=2n0+n1=n1+n2+n3+1=n+1

 

前中后遍历

              -

           /     \

        +        /

     /    \     /    \

    a    *    e     f

        /   \

      b     -

           /    \

          c    d

前:-+a*b-cd/ef

中:a+b*c-d-e/f

后:abcd-*+ef/-

 

哈夫曼树

https://blog.csdn.net/qq_29519041/article/details/81428934

线索二叉树

平衡二叉树

平衡二叉树,且树中每个节点的左右子树深度之差(平衡因子BF)的绝对值不大于1

构造:平衡旋转

二叉搜索树/二叉排序树/二叉查找树

最多2个孩子,左子树上所有节点的值<根节点的值<右子树上所有节点的值,左右子树也是二叉排序树。

平均查找长度ASL

B树

B-tree,Balance,B树又称B-树,多路平衡查找树

m阶B树:空树,或m叉树,满足:

1、最多m个子树

2、若根节点不是叶子节点,至少有2个子树

3、除根节点外的所有非终端节点至少有ceil(m/2)个子树

4、非终端节点数据信息(n, A0, K1, A1, K2, A2,..., Kn, An),

Ki为关键字,K< Ki+1,Ai为指向子树根节点的指针,指针Ai-1所指子树所有节点关键字均小于Ki,An所指子树所有节点关键字均大于Kn

一棵m阶B-树每个节点最多有m棵子树m-1个关键字,最少有ceil(m/2)棵子树ceil(m/2)-1个关键字

5、所有叶子节点同层,不带信息

插入:节点分裂

删除:节点合并

B+树

参考文章(B/B+树

https://www.cnblogs.com/nullzx/p/8729425.html

关键字个数=子树个数

所有叶子节点中包含全部关键字信息及指向含关键字记录的指针,且叶子节点按关键字自小而大连接

非终端节点可看成索引,节点中仅含有其子树中最大/最小关键字

 

邻接矩阵 环

邻接表

深度/广度

最小生成树(Prim)

顶点集合,取最小权顶点加入,递归。

拓扑排序

无环。

取入度为零的顶点。在图中删除该顶点和从他出发的边

关键路径

 https://blog.csdn.net/fu_jian_ping/article/details/88962697

最短路径(Dijkstra算法)

https://blog.csdn.net/heroacool/article/details/51014824

 

排序

快排 折半查找 堆排序(最大堆、最小堆)

 

查找

哈希表

哈希查找/散列查找:存储地址和关键字之间建立对应关系

哈希函数:从关键字空间到存储地址空间的一种映像,addr(ai) = H(ki),ai是表中一元素,addr(ai) 是ai的存储地址,ki是ai的关键字

哈希表:根据哈希函数和某种处理冲突的方法,将一组关键字映像到有限、地址连续的地址集上

处理线性冲突:除留余数法、线性探测再散列

冲突: H(key1) = H(key2) 且 key1不等于key2

哈希函数构造法:

直接定址法:哈希函数为关键字的线性函数

数字分析法

平方取中法

折叠法:移位叠加,间界叠加

除留余数法:设定哈希函数为:H(key) = key MOD p (p≤m),其中,m为表长,p为不大于m的素数或是不含20以下的质因子

随机数法

处理冲突法:

开放地址法:为产生冲突的地址H(key)求得一个地址序列:H0, H1, …, Hs 1≤ s ≤m-1,Hi = ( H(key) + di ) MOD m,其中: i=1, 2, …, s,H(key)为哈希函数,m为哈希表长,di为增量序列,有下列三种取法:

 1)线性探测再散列:关键字+C

 2)二次探测再散列:关键字+[12, -12, 22, -22, ...]

 3)随机探测再散列:m和di没有公因子

再哈希法:构造若干个哈希函数,当发生冲突时,计算下一个哈希地址,直到冲突不再发生

链地址法:将所有哈希地址相同的记录都链接到同一链表中

约瑟夫,单循环链表

 

c++

栈 字符串 参数作用域 继承派生 链表。。。

1.a++和++a

a++先取值后自增 b = a++; // b = a 

++a先自增后取值 b = ++a; // b = a+1

a=a+1

a+=1

2.引用 &

https://www.runoob.com/cplusplus/passing-parameters-by-references.html

https://www.runoob.com/cplusplus/returning-values-by-reference.html

3.指针 *

https://www.runoob.com/cplusplus/cpp-pointers.html

指针和引用

https://blog.csdn.net/hahachenchen789/article/details/83056728

4.继承