二叉树的几个基本性质
2014-03-14 09:51
295 查看
性质1: 在二叉树的第 i 层上最多只有 2^(i-1) 个结点;
性质2:深度为 k 的二叉树至多有 2^k - 1 个结点 ;
性质3:对于任何一课二叉树,结点总数为 n 个 ,如果其叶子结点数为 n(0) 个 ,度为1的结点有 n(1) 个,度为2的结点有 n(2) 个 ,则:
n = n(0) + n(1) + n(2) ; (加法原理)
若假设B为分支的总数:则有: n = B + 1 , B = n(1) + 2*n(2) ; (加法原理,分支总数等于度为1的数目+ 2*度为2的数目);
所以可以得到: n = n(1) + 2 * n(2) + 1 ;
n(0) = n(2) + 1 ;
性质4:具有n个结点的完全二叉树的深度为floor(log(2)n)+ 1 ;
假设深度为k,则: 2^(k-1)-1 < n <= 2^(k) - 1 ;
2^(k-1) =< n <2^(k) ;
k-1 <=log(2)n < k ;
因为k为整数,所以k = floor( log(2)n ) + 1 ;
性质5:如果对一颗有n个结点的完全二叉树(其深度为floor(log(2)n)+1)的结点按层序从1开始编号。则对任一编号为 i 的结点,有:
(1)如果i = 1 ;,则编号为 i 的结点是二叉树的根,无双亲,如果i > 1 , 则其双亲结点的编号为floor(i / 2) ;
(2)如果2*i > n ; 则编号为 i 的结点是叶子结点,否则其左孩子结点编号为2*i 。
(3)如果2*i + 1 > n ,则编号为 i 的结点无右孩子结点,否则其右孩子结点的编号为2*1 + 1 ;
性质2:深度为 k 的二叉树至多有 2^k - 1 个结点 ;
性质3:对于任何一课二叉树,结点总数为 n 个 ,如果其叶子结点数为 n(0) 个 ,度为1的结点有 n(1) 个,度为2的结点有 n(2) 个 ,则:
n = n(0) + n(1) + n(2) ; (加法原理)
若假设B为分支的总数:则有: n = B + 1 , B = n(1) + 2*n(2) ; (加法原理,分支总数等于度为1的数目+ 2*度为2的数目);
所以可以得到: n = n(1) + 2 * n(2) + 1 ;
n(0) = n(2) + 1 ;
性质4:具有n个结点的完全二叉树的深度为floor(log(2)n)+ 1 ;
假设深度为k,则: 2^(k-1)-1 < n <= 2^(k) - 1 ;
2^(k-1) =< n <2^(k) ;
k-1 <=log(2)n < k ;
因为k为整数,所以k = floor( log(2)n ) + 1 ;
性质5:如果对一颗有n个结点的完全二叉树(其深度为floor(log(2)n)+1)的结点按层序从1开始编号。则对任一编号为 i 的结点,有:
(1)如果i = 1 ;,则编号为 i 的结点是二叉树的根,无双亲,如果i > 1 , 则其双亲结点的编号为floor(i / 2) ;
(2)如果2*i > n ; 则编号为 i 的结点是叶子结点,否则其左孩子结点编号为2*i 。
(3)如果2*i + 1 > n ,则编号为 i 的结点无右孩子结点,否则其右孩子结点的编号为2*1 + 1 ;
相关文章推荐
- PHP错误:Warning: preg_replace() [function.preg-replace]: Unknown modifier '[' in
- android自定义Actionbar遇到的一点问题【titlebar以及thme的选择】
- xcode环境变量和路径设置
- Javascript优质组件
- ContentProvider URI的组成
- 抛出一个异常
- Nginx中让 重写后的路径 自动增加斜线 /
- Use Unicode Character Set: CString 转为 char*
- 通过adb logcat读取保存android日志
- 攻防比赛点点滴滴(1)
- 使用 VisualSVN server 发生的一个问题
- 接口协议速率
- 浅谈C/C++堆栈指引——C/C++堆栈很强大(转)
- 【PAT Basic Level】1001 害死人不偿命的(3n+1)猜想
- 下拉刷新+分页加载通用版本支持gridview、listview、scrollview
- video4linux(v4l)使用摄像头的实例基础教程与体会
- 1
- 浅析几种数据集合(Dictionary、ArrayList、Hashtable和Array)的区别
- 前端插件小结
- String Successor(模拟)