导图
完全二叉树:从上到下,从左到右
一、二叉树的性质
性质推导
-
第一层1个,第二层2个,...,第i层2^(i-1)个
-
假设为满二叉树(即结点最多的情况),则总结点数为1+2^1+2^2+...+2^(k-1)个,首项为1,比值为2,共k项 等比数列求和得1*[(1-2^k)/(1-2)]=2^k-1
- 对于任意一棵二叉树,叶子结点的数量n0等于度为 2 的结点数量n2加 1,即 n0=n2+1
- n0:二叉树中叶子结点的数量(叶子结点是 “度为 0” 的结点,即没有子结点的结点);
- n2:二叉树中度为 2的结点数量(度为 2 表示该结点有 2 个子结点:左孩子 + 右孩子)。
4.向下取整再加1
习题
二、二叉树的遍历
类型
先序、中序、后序(看根节点的顺序)
1、先序遍历算法
void PreOrder(BiTree T){
if(T==NULL){ return; }
cout<<T->data;//先访问根节点
PreOrder(T.lchild);//再递归访问左子树
PreOrder(T.rchild);//最后递归访问右子树
}
其他调换cout<data;的位置即可
2、计算叶子结点个数
int leafCount(BiTree T){
if(T==NULL) return 0;//如果是空树返回0
if(T->lchild==NULL&&T->rchild==NULL){//遇到叶子结点加1
return 1;
}
return leafCount(T->lchild)+leafCount(T->rchild);
}
3、二叉树遍历算法的应用
三、哈夫曼树(带权路径长度最短的二叉树)及其编码
贪心算法——>每次选取两个最小的进行合并——>得到最小带权路径 哈夫曼树的构造不一定是唯一的