首页 > 代码库 > 树 -- 基本知识
树 -- 基本知识
自由树
自由树是一个连通,无回路的无向图. 显然树是图的一种.
如果一个无向图虽然无回路,但是可能非联通,那么这个图成为森林.(森林可以调整为一颗二叉树[左儿子,右兄弟]). 森林是m(m>=0)棵互不相交的树的集合。
令G = (V,E)为一个无向图.则以下6点是等价的.
1) G是自由树;
2) G中任意两个顶点由唯一一条简单路径相连;
3) G是连通的,但是从E中去除任何边后得到的图都是不连通的;
4) G是连通的,且 |E| = |V| - 1;
5) G是无回路的, 且|E| = |V| - 1;
6) G是无回路的,但添加任何边到E中后得到的图包含回路;
有根树
从根root到树中某一节点x的唯一简单路径上的节点y称为x的祖先.
如果y是x的一个祖先,则x是y的子孙.
如果y是x的祖先,且 y != x,则y是x的真祖先, x是y的真子孙.
有根树中节点x的子女个数称为x的度.
从根root到节点x的路径长度称为x在树中的深度.
从节点x向下到某个叶节点最长简单路径中边个个数称为x的高度. 树的高度是其根的高度,同时也等于树中节点的最大深度.
二叉树
满二叉树(Full Binary Tree):
第一种定义:任意节点或者是叶节点,或者度为2,不存在度为1的节点。
第二种定义:一颗深度为k,且有2k-1个节点的二叉树。
完全二叉树(Complete Binary Tree): 所有叶节点具有相同的深度,且所有的内部节点度都为2.
二叉树的性质:
1)在二叉树的第i层上至多有2(i-1)个节点。
2)深度为k的二叉树至多有2k-1个节点。
3)对任何一颗二叉树T,如果其叶子节点的个数为m,度为2的节点树为n,则m = n + 1
假设度为1的节点个数为k,则总结点数为 m + n + k
通过节点的度,可以确定总边数为2*n + k
因为|E| = |V| + 1 , 因此 m + n + k = 2*n + k + 1,即m = n + 1
4)具有n个节点的完全二叉树的深度为floor(log2n)+1
5)如果对一颗有n个节点的完全二叉树的节点按层序编号,则对任一节点,有
【1】如果i == 1,则节点i是二叉树的根,则无父节点;否则,父节点为floor(i/2)
【2】如果2*i > n,则节点i是叶子节点,无左儿子;否则其左儿子为2*i
【3】如果2*i + 1 > n,则节点i无右儿子;否则其右儿子为2*i + 1
参考
1)算法导论
2)数据结构 -- 严蔚敏
树 -- 基本知识