数据结构第五章小结

时间:2020-05-30
本文章向大家介绍数据结构第五章小结,主要包括数据结构第五章小结使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

第五章主要学习新的数据结构:树;

个人觉得难点在于线索二叉树部分,虽说没有要求大程度掌握,自己可能还得多看看

思维导图如下:

知识点记录:

在树的结点个数与边:自下向上看,根结点是唯一一个没有带边的结点,即结点数为边数+1。

在第五章学习过程中

纠错点:

int n;
cin>>n;
int a[n];//这种定义数组的方法在c语言中是合法,但在c++中并不合法

int n;
cin>>n;
int *a =new int[n];//这种是合法的;

两者区别在于:如果n过大 前者申请的栈空间,其空间有限,可能会造成越界访问;
而堆空间却不用担心这样的问题出现。

学习

一、本章代码:大多算法都是使用的递归

实践1题:树的同构

一开始传入的为两棵树的根结点

bool judge(int t1 ,int t2)
{
	if(t1==-1&&t2==-1)  return 1;//都为空
	if(T1.data[t1].num!=T2.data[t2].num)  return 0;//结点不相同 
	   //根据传入数据(根结点/左孩子/右孩子),定位编码 
	 else
	{//无需讨论左/右孩子是否均为空,利用递归判断if(t1==-1&&t2==-1)是否均为空、
	//if(T1.data[t1].num!=T2.data[t2].num)是否不相同即可 

	  if(judge(T1.data[t1].lch,T2.data[t2].lch)&&judge(T1.data[t1].rch,T2.data[t2].rch))
	  return 1;//要么左左比较,右右比较 

	 else if(judge(T1.data[t1].rch,T2.data[t2].lch)&&judge(T1.data[t1].lch,T2.data[t2].rch))
	 return 1;//要么左右比较 

	 else return 0;//两者均不成立
	 }
	
}

实践2题:是否同一棵二叉搜索树

第一种思路:
分别构建树,用递归去判断两个树是否相同;

第二种思路:利用二叉搜索树中根结点与左子树、右子树的大小对比特点;
例子: 3 1 4 23  4  1 2;
将在输入过程中将比树的根结点小的放入左队列,大的放入右队列;
再构建一个函数,分别两个树对应的队列进行比较;

第三种思路:
分别构建树,进行层次遍,利用队列,将两棵树从根结点开始一一比较,
一有不相等则输出:No,break出循环;如果遍历到整个结束则输出Yes;

小组合作:最深的叶子结点

在看到小测题的时候,第一反应便是怎么求出深度,也许就是老师说的带错节奏;

整个过程都没有想到利用层次遍历来解决,此算法可以避免求深度

互评过程中蛮多小组都想到了层次遍历,值得学习。

二、、spoc讨论

1、哈夫曼树

哈夫曼树虽是最优的,但不一定唯一的;

可以通过调换同层次的叶子结点来获取与哈夫曼树权值相同的树

2、相应存储类型定义

int a[1000];
int b[1000];
相当于
typedef int array[1000];//typedef Telemtype sqitree[maxsize];的实际例子
array a,b;

原文地址:https://www.cnblogs.com/sjjgcxn/p/12990201.html