数据结构:第五章学习小结

一、对本章内容的小结(第三第四小点属于应用级别,需要打代码)

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.做一些递归的算法题

posted @ 2020-05-31 22:22  甘番雨  阅读(204)  评论(0编辑  收藏  举报