树和图
图
有权图,无权图,有向图(用尖括号<>),无向图(用圆括号())
边上的数字称为边权
用顶点表示事物,用连接两个点的边表示相应两个事物具有某种联系
图是图论的研究对象
图通常用G(V,E)G(V,E)G(V,E)表示,VVV为顶点集合,EEE为边集合(GraphGraphGraph VertexVertexVertex EdgeEdgeEdge)
即
> G(V,E)G(V,E)G(V,E)=GraphGraphGraph VertexVertexVertex EdgeEdgeEdge
顶点的个数称为图的阶
完全图:无向图中任何一对顶点之间都有一条边
完全图边数为:
> NumNumNum=N∗(N−1)/2N*(N-1)/2N∗(N−1)/2
其中nnn为顶点个数
稀疏图:边的数目相对较少
稠密图:边的数目相对较多
平凡图:只有一个顶点的图
自环:一个结点连接到自身的图
重边:两个结点之间存在多条边
简单图:一种无向图或有向图,其中不存在自环和重边
复杂图:一种有向图或无向图,其中存在自环或重边
连通:若从顶点uuu到vvv有路径,则称顶点uuu和vvv是联通的
连通图:如果无向图中任意一对顶点都是连通的,则称此图为连通图
强连通图:如果有向图中,若每一对顶点uuu和vvv,即存在从uuu到vvv的路径,也存在vvv到uuu的路径,则称此图为强连通图
度:与该顶点相连的边的数量
入度:指向该顶点的边的数量
出度:从该顶点出发的边的数量
树
树:不存在回路的无向连通图
度:结点拥有的子树的数量
叶子结点:度为000的结点
树的度:所以结点中度的最大值
孩子:结点的直接后继
父亲:结点的直接前驱
兄弟:有同一个双亲的不同结点
树的输入
层次:根节点为第一层,根节点的孩子为第二层,以此类推
树的深度/高度:树中结点的最大层次
树的直径
https://vjudge.net/problem/SPOJ-PT07Z
1.BFS
2.DFS
二叉树
二叉树:度数大于二的树,即二叉树的每一个结点最多有两个子结点,每个结点的子结点分别称为左孩子,右孩子
满二叉树:一棵深度为k且有 2k−12^k-12k−1个结点的二叉树
完全二叉树:若二叉树的高度为kkk,则共有kkk层,除第kkk层外,其他各层(1(1(1~(k−1))(k-1))(k−1))的结点树都到底最大个数,且第kkk层缺少的结点是从右到左连续的
二叉搜索树:是一种应用非常广泛的二叉树,又称二叉查找树,二叉排序树
层数为kkk的满a叉树的结点个数n:
> n=n=n=(ak−1)/(a−1)(a^k-1)/(a-1)(ak−1)/(a−1)
对任意一棵二叉树,如果其叶子结点的数量为n0n_0n0 ,度为2的结点树为n2n_2n2 ,则一定满足n0=n2+1n_0=n_2+1n0 =n2 +1
具有n(n>=0)n(n>=0)n(n>=0)个结点的完全二叉树的深度为[log2n]+1[log_2n]+1[log2 n]+1
如将一棵有nnn个结点的完全二叉树自顶向下,同一层自左向右连续给结点编号1,2……nnn,则有以下关系:
> 1.若i=1i=1i=1,则结点iii为根,无父结点
> 2.若i>1i>1i>1,则i的父结点编号为[i/2][i/2][i/2]
> 3.若2∗i>n2*i>n2∗i>n,则iii无左孩子,否则其左孩子编号为2∗i2*i2∗i
> 4.若2∗i+1>n2*i+1>n2∗i+1>n,则iii无右孩子,否则其右孩子编号为2∗i+12*i+12∗i+1
先序遍历:首先访问根结点遍历左子树,最后便利右子树。在遍历左,右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树,如果二叉树为空则返回(后序为左>右>根,中序为左>根>右)
中序+另外任意一种遍历方式,可以确定唯一一棵二叉树。先序遍历与后序遍历不一定能确定唯一一个二叉树
重建二叉树:先看先序的首项或后序的尾项确定根结点,再根据中序的根节点分隔左右子树的特点确定左右子树有哪些,以此类推直至确定整个二叉树
已知中序后序求前序