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