1.本周学习总结

1.思维导图

2.学习体会

 查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。在本章中,我们学习了大量的查找算法,比如折半查找,比如顺序查找等,还有运用在树里的,每一种查找各有不同,在做题时,我们往往需要根据题目的特点,选择合适的查找方法,并且考虑时间和空间复杂度,使代码达到更优。

2.PTA实验作业

2.1题目一: 是否二叉搜索树

2.1.1设计思路(伪代码)

首先二叉搜索树,就是:
非空左子树的所有键值小于其根结点的键值。
非空右子树的所有键值大于其根结点的键值。
左、右子树都是二叉搜索树。
所以就按这个考虑

2.1.2代码截图

2.1.3提交列表及说明

A1:编译错误?
Q1:就是日常会犯的毛病,这块少一个分号,纳里少一个括号啥的。
A2:编译错误?
Q2:在后面的if else中,while的循环不会写,就一直编译错误。

2.2题目二:二叉搜索树中的最近公共祖先

2.2.1设计思路(伪代码)

首先二叉搜索树,就是:
非空左子树的所有键值小于其根结点的键值。
非空右子树的所有键值大于其根结点的键值。
左、右子树都是二叉搜索树。
所以就按这个考虑

2.2.2代码截图


2.2.3提交列表及说明


A1:编译错误?
Q1:我不太有思路。
A2:部分正确?
Q2:在后面的循环中,我少了考虑了一种情况。

2.3题目三:QQ帐户的申请与登陆

2.3.1设计思路(伪代码)


	int m;
	cin>>m;
	string a3,a2;
	char a1;
	while(m--)
	{
		cin>>a1>>a2>>a3;
		if(a1=='N')//判断是L还是N
		{
			if(Q.find(a2)==Q.end())//map用法
			{
				Q[a2]=a3;
				cout<<"New: OK"<<endl;
			}
			else
			{
				cout<<"ERROR: Exist"<<endl;
			}
		}
		if(a1=='L')
		{
			if(Q.find(a2)==Q.end())
			{
				cout<<"ERROR: Not Exist"<<endl;
			}
			else
			{
				map<string,string>::iterator it;
				it=Q.find(a2);
				if(it->second==a3)
				{
					cout<<"Login: OK"<<endl;
				}
				else
				{
					cout<<"ERROR: Wrong PW"<<endl;
				}
			}
 		
		}
	}

2.3.2代码截图



2.3.3提交列表及说明


A1:编译错误?
Q1:在写map<string,string>::iterator it;时,由于运用不熟练,编译错误了。
A2:编译错误?
Q2:对代码理解错误,导致出的编译错误。

3.阅读代码

3.1题目:递增顺序查找树

给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。

3.2解题思路

1.给定树中的结点数介于 1 和 100 之间。
2.每个结点都有一个从 0 到 1000 范围内的唯一整数值。

3.3代码截图

3.4学习体会

要熟练的掌握各种代码的操作并要熟悉他们,这样在做题的时候才会有思路,而且要保证代码的规范性,养成良好的习惯。