二叉树概念

二叉树的递归定义:二叉树要么为空,要么由根结点、左子树和右子树组成,而左子树和右子树分别是一棵二叉树。
下面这棵树就是一棵二叉树。

二叉树中还有连两种特殊的二叉树:满二叉树和完全二叉树
满二叉树: 满二叉树的严格的定义是一棵深度为 h 且有 2^h -1  个结点的二叉树


完全二叉树: 严格的定义是:若设二叉树的高度为 h,除第 h 层外, 其它各层 (1~h-1) 的结点数都达到最大个数 ,第 h 层从右向左连续缺若干结点,就是完全二叉树

满二叉树是一种完美的特殊的、极其完全的二叉树

完全二叉树的存储: 其实完全二叉树中父亲和儿子之间有着神奇的规律,我们只需用一个一维数组就可以存储完全二叉树。首先将完全二叉树进行从上到下,从左到右编号。

通过上图我们发现如果完全二叉树的一个父结点编号为 k,那么它左儿子的编号就是 2k,右儿子的编号就是 2k+1。如果已知儿子(左儿子或右儿子)的编号是 x,那么它父结点的编号就是 x/2,注意这里只取商的整数部分。在 C 语言中如果除号‘/’两边都是整数的话,那么商也只有整数部分(即自动向下取整),即 4/2 和 5/2 都是 2。另外如果一棵完全二叉树有 N 个结点,那么这个完全二叉树的高度为 log2 N 简写为 log N,即最多有 log N 层结点。

猜你喜欢

转载自blog.csdn.net/FJJ543/article/details/79766627