数据结构之二叉树

时间:2021-08-25 10:47:04

二叉树的定义:二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有 2i1 个结点;深度为k的二叉树至多有 2k1 个结点;对任何一棵二叉树T,如果其终端结点数为 n0 ,度为2的结点数为 n2 ,则 n0=n2+1

满二叉树和完全二叉树

  满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点。也可以这样理解,除叶子结点外的所有结点均有两个子结点。节点数达到最大值,所有叶子结点必须在同一层上。

  满二叉树的性质:

  1) 一颗树深度为h,最大层数为k,深度与最大层数相同, k=h ;

  2) 叶子数为 2h ;

  3) 第k层的结点数是: 2k1 ;

  4) 总结点数是: 2k1 ,且总节点数一定是奇数。

  完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~(h-1)层) 的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。

  注:完全二叉树是效率很高的数据结构,堆是一种完全二叉树或者近似完全二叉树,所以效率极高,像十分常用的排序算法、Dijkstra算法、Prim算法等都要用堆才能优化,二叉排序树的效率也要借助平衡性来提高,而平衡性基于完全二叉树。

二叉树的性质

1、在非空二叉树中,第i层的结点总数不超过 2i1 , i1 ;

2、深度为h的二叉树最多有 2h1 个结点(h≥1),最少有h个结点;

3、对于任意一棵二叉树,如果其叶结点数为 N0 ,而度数为2的结点总数为 N2 ,则 N0=N2+1 ;

4、具有n个结点的完全二叉树的深度为 log2(n+1) ;

5、有N个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系:

  若i为结点编号则 如果i>1,则其父结点的编号为i/2;

  如果2i≤N,则其左儿子(即左子树的根结点)的编号为2i;若2i>N,则无左儿子;

  如果2i+1≤N,则其右儿子的结点编号为2i+1;若2i+1>N,则无右儿子。

6、给定N个节点,能构成h(N)种不同的二叉树,其中h(N)为卡特兰数的第N项,h(n)=C(2*n, n)/(n+1)。

7、设有i个枝点,I为所有枝点的道路长度总和,J为叶的道路长度总和J=I+2i。