树的各种概念:
二叉树
节点表示:
struct btnode{
int data;
btnode *left;
btnode *right;
}
几个性质:
1. 根节点处于第1层,在二叉树的第i层上至多有2^(i-1)个节点(i>=1)
2. 深度为k的二叉树至多有2^k-1个节点 (2^0 + 2^1 +....+2^(k-1) = 2 ^ k -1) (假如只有根节点,深度为1)
3. 对任何一棵二叉树T,如果叶子节点数为n0,度为2(左右孩子双全)的节点数为n2 ,那么 n0 = n2 +1
证明:二叉树节点度数最大为2,则 : n = n0 + n1 + n2 (等式一)
从孩子个数角度出发: 度为0的节点没有孩子, 度为1的节点没有1个孩子,度为2的节点有2个孩子,孩子总数为 n00 + n11 +n2 2 = n1+2n2;树的所有节点中,只有根不是任何节点的孩 子,因此有 n -1 = n1 + 2* n2 ,即 n = n1 + 2* n2 + 1. (等式二)
由等式一等式而可以推出 n0 = n2 +14. 满二叉树和完全二叉树的定义:
满二叉树要满足两个条件:
- 所有的节点都同时具有左子树和右子树。
- 所有的叶子节点都在同一层上。
完全二叉树:
在一棵二叉树中,只有最下两层的度可以小于2,并且最下一层的叶子节点集中出现在靠左的若干位置上。


二叉树的4种遍历:
二叉查找树
定义
二叉排序树或者是一棵空树,否则要求:
- 若它的左子树不为空,那么左子树上所有节点的值都小于根节点的key
- 若它的右子树不为空,那么右子树上所有节点的值都大于根节点的key
- 它的左右子树也分别为二叉排序树
根据定义,二叉查找树中没有重复key的节点。
二叉查找树,最重要的是它的中序遍历(左中右)是一个递增序列。(有些题在这作文章)
还有个重要的是二叉查找树的删除操作。(当两个孩子都在的时候,找右子树的最左节点)
二叉搜索树的实现: 刷题(5)-二叉查找树(2)_speargod的博客-CSDN博客
堆
堆的性质:
1) 根节点的值是最大(最小)的,左右子树也是一个二叉堆。
2) 用数组来实现堆。当下标是i的时候,左孩 2*i+1,右孩2*i+2,父节点(i-1)/2,最后一个非叶节点 n/2-1(n是数组长度)
3) 堆的插入和删除,时间复杂度O(log n) ,构造一个堆的时间复杂度 O(N)
4) 构造一个堆的方法:从第一个非叶节点(n/2-1)开始,到0,挨个sink。 (时间复杂度O(N))

-树(1)&spm=1001.2101.3001.5002&articleId=97319383&d=1&t=3&u=f0474126158f4a1b90eadaaa560bc13e)

被折叠的 条评论
为什么被折叠?



