二叉树梳理
2016-04-30 22:17
344 查看
逻辑上的二叉树有五种形态:
(1)空二叉树;
(2)只有一个根节点的二叉树
(3)只有左子树
(4)只有右子树
高度=深度+1,深度=层数。
节点M的深度就是根节点到M的路径长度,任何深度为d的节点的层数也为d。
而叶节点没有非空子树,至少有一个非空子树的节点成为分支节点。
而满二叉树和完全二叉树的区别在于:
满二叉树:通俗的讲,要么分支节点有两个非空子节点,要么其为叶节点;
安全二叉树:满足两个条件:如果高度为d,则除了d-1层,其他都是满的;最后一层的叶节点集中在左边的若干位置上。
二叉树的性质:
满二叉树定理:1、非空满二叉树树叶数等于其分支节点数+1.通俗的将就是说,叶节点的数量等于所有分支节点(包括根节点)的数量+1
2、一颗非空二叉树空子树的数目等于其节点数目加1。即下一层的不存在的叶节点=所有节点数目+1.
3、任何一颗二叉树,度为0的节点比度为2的节点多一个。
4、二叉树的第i层最多有2的i次方个节点
5、高度为k(深度为k-1。只有一个根节点的二叉树的高度为1,深度为0)的二叉树最多有2的k-1次方个节点
6、有n个节点的完全二叉树的高度为log2(n+1),深度为log2n。
遍历二叉树:
前序遍历:根左右 A B D C
中序遍历:左根右 二叉排序树 B D A C
后序遍历:左右根。D B C A
二叉检索树(BST):
二叉检索树或者为空,或者是满足下列条件的非空二叉树:
1、若它的左子树非空,则左子树上所有节点的值均小于根节点的值;
2、若他的右子树非空,则右子树上所有节点的值均大于或等于根节点的值
3、左右子树本身又各是一棵二叉检索树
霍夫曼树略。
(1)空二叉树;
(2)只有一个根节点的二叉树
(3)只有左子树
(4)只有右子树
高度=深度+1,深度=层数。
节点M的深度就是根节点到M的路径长度,任何深度为d的节点的层数也为d。
而叶节点没有非空子树,至少有一个非空子树的节点成为分支节点。
而满二叉树和完全二叉树的区别在于:
满二叉树:通俗的讲,要么分支节点有两个非空子节点,要么其为叶节点;
安全二叉树:满足两个条件:如果高度为d,则除了d-1层,其他都是满的;最后一层的叶节点集中在左边的若干位置上。
二叉树的性质:
满二叉树定理:1、非空满二叉树树叶数等于其分支节点数+1.通俗的将就是说,叶节点的数量等于所有分支节点(包括根节点)的数量+1
2、一颗非空二叉树空子树的数目等于其节点数目加1。即下一层的不存在的叶节点=所有节点数目+1.
3、任何一颗二叉树,度为0的节点比度为2的节点多一个。
4、二叉树的第i层最多有2的i次方个节点
5、高度为k(深度为k-1。只有一个根节点的二叉树的高度为1,深度为0)的二叉树最多有2的k-1次方个节点
6、有n个节点的完全二叉树的高度为log2(n+1),深度为log2n。
遍历二叉树:
前序遍历:根左右 A B D C
中序遍历:左根右 二叉排序树 B D A C
后序遍历:左右根。D B C A
二叉检索树(BST):
二叉检索树或者为空,或者是满足下列条件的非空二叉树:
1、若它的左子树非空,则左子树上所有节点的值均小于根节点的值;
2、若他的右子树非空,则右子树上所有节点的值均大于或等于根节点的值
3、左右子树本身又各是一棵二叉检索树
霍夫曼树略。
相关文章推荐
- 【单调队列优化DP】BZOJ1855-[Scoi2010]股票交易
- 初识Fragment
- 写题时常犯错误归纳总结 = = 持续更新
- 3.fork()到底干了啥?
- php下使用curl进行多种数据编码方式的POST请求
- 快速幂
- [数据结构]Priority_queue(优先级队列)
- 初识spring mvc + mybatis
- 多线程中调用run()方法和start()方法的简单区别
- HDU 5676 ztr loves lucky numbers(dfs+离线)——BestCoder Round #82(div.1 div.2)
- [数据结构]Radix_sort(MSD)
- 关于i2c_register_board_info()函数
- nodejs包高效升级插件npm-check-updates
- MOOC的Python笔记(三)基本算术、逻辑操作符
- couchbase的简单介绍
- Oracle简单易用的表结构导出方法
- [POJ 2886] Who Gets the Most Candies? (Joseph环问题 + 树状数组)
- Codeforces 665A - Buses Between Cities
- HTML5培训第10节课堂笔记(盒子模型、行内与块级、float、定位、html5布局)
- Linq 语法举例