一、对本章内容的小结(第三第四小点属于应用级别,需要打代码)
1.二叉树分为:满二叉树和完全二叉树。
满二叉树:深度为K且含有2^k-1个结点的二叉树。
完全二叉树::深度为K的, 有n个结点的二叉树, 当且仅当其每一个结点都与深度为K的满 二叉树中编号从1至n的结点一一对应时, 称之为完全二叉树。
2.二叉树的一些计算:
1)在二叉树的 第l层上至多有2^(i-l) 个结点
2)深度为K的二叉树至多有 2^k-1个结点
3)n0=n2+1 !!!结点总数=分支总数+1
4)具有n个结点的完全二叉树的深度为log2n+ 1
5)完全二叉树,且按照层序,第i个结点,左孩子为第2i个,右孩子为第2i+1个
3.二叉树的存储结构:顺序存储,链式存储
//-----二叉树的顺序存储表示----- #define MAXTSIZE 100 typedef TElemType SqBiTree [MAXTSIZE]; SqBiTree bt; //SqBiTree代表一个数组类型,长度为MAXTSIZE,每个数组元素类型为TElemType
//SqBiTree 等价于TElemType [MAXTSIZE]
//- - - - -二叉树的二叉链表存储表示- ---- typedef struct BiTNode{ TElemType data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;
搞清楚这两种存储方式的优劣:顺序存储方便找到父母孩子结点,但需要较多空间;一般二叉树使用链式存储
4.递归的应用
1)中序,先序,后序遍历二叉树
2)先序建立二叉链表
3)复制二叉树,计算二叉树的深度,统计结点个数
5.利用孩子兄弟法,实现一般的树与二叉树的转换,以及森林与二叉树的转换
6.构造哈夫曼树,以及哈夫曼编码
二、完成作业或实践时的心得体会
1.利用check[ ]寻找根节点
2.利用flag来控制空格的输出
3.利用c++库函数中的队列,进行二叉树的层序遍历 !!!先序中序后序遍历都是递归
4.int n; cin>>n;BiTNode *BiTree=new BiTNode[n] 注意语句顺序,new可以分配可变长数组
int n; cin>>n;int a[n]; 错误,c++不允许数组长度为变量
5.时间复杂度
三、资料推荐
https://blog.csdn.net/riemann_/category_8782953.html
内含二叉查找树,平衡树等多种数据结构资料
https://www.cnblogs.com/fengbohello/p/5866592.html
二叉查找树
https://blog.csdn.net/notOnlyRush/article/details/79997472
三者比较
四、接下来的目标及往期回顾
上期目标:
1.搞懂动态分配,堆,栈,int char数组最大分配空间 完成
2.学会算时间复杂度 完成
接下来的目标:
1.二叉链表的创建不熟悉,回顾单链表,二叉链表的知识
2.整理list leaves 的知识点
3.做一些递归的算法题
原文:https://www.cnblogs.com/gfyblog/p/13022011.html