今天我们转入二叉树战场了~~~
目录
一、二叉树是什么?
1、二叉树概念
二叉树是一棵结构有点像链表的树,但一个根节点最多只有2个孩子节点。
2、二叉树的结构
(1)结构
(2)代码
typedef int BTDataType;
typedef struct BinaryTreeNode
{
BTDataType _data;
struct BinaryTreeNode* _left;
struct BinaryTreeNode* _right;
}BTNode;
二、二叉树的性质
1、性质1
若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有 2^(i-1) 个结点。
原因:对于一棵满二叉树来说,每层的节点数为等比数列。
2、性质2
若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 (2^h) - 1 .
原因:对于一棵满二叉树来说,每层节点数为等比数列。因此总节点数请参照等比数列求和公式。
3、性质3(重点)
对任何一棵二叉树, 如果度为0其叶子结点个数为N0 , 度为2的分支结点个数为N1 ,则有 N0 = N1+1.
原因:对于任意一棵二叉树来说,都由若干棵下面这几种子树构成:
不难看出,当度为0的节点变成度为2的节点时,度为0的节点和度为2的节点都同时会比原来多一个;当度为0的节点变成度为1的节点时,度为0和度为2的节点数都不变。所以由此看出,当形式1发生变化时,度为0的节点和度为2的节点数都会同时变化相同的数量,所以度为0的节点和度为2的节点数的差值在变化时永远不会改变,且完全取决于形式1中度为0的节点和度为2的节点的差值,即1。
4、性质4
若规定根节点的层数为1,具有n个结点的满二叉树的深度,h=log(n+1) . (ps: 是log以2 为底,n+1为对数)
原因:(2^h) - 1 = n
5、性质5
对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对于序号为 parent 的结点有:
(1)若2 * parent + 1 >= n, 则无左孩子
(2)若2 * parent + 2 >= n, 则无右孩子
原因:parent = (child - 1) / 2.
三、完全二叉树与满二叉树
1、完全二叉树
完全二叉树其实就是除了最后那层的节点没有满之外,其他层的节点都是满的。但需要注意的是,完全二叉树最后一层的节点一定是连续的。
2、满二叉树
满二叉树就是这棵二叉树的每一层节点都是满的。
好了,这就是二叉树的第一部分~~~