首页 > 代码库 > 树 -- 基本知识

树 -- 基本知识

自由树


  自由树是一个连通,无回路的无向图. 显然树是图的一种.

      如果一个无向图虽然无回路,但是可能非联通,那么这个图成为森林.(森林可以调整为一颗二叉树[左儿子,右兄弟]). 森林是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)数据结构 -- 严蔚敏

树 -- 基本知识