博客作业05--查找
1.学习总结(2分)
1.1查找的思维导图
1.2 查找学习体会
查找是一种十分有用的操作,而且非常重要,然后我觉得它同时也挺复杂的,学起来不轻松,而且很多算法我得翻书看代码,尤其是哈希表的算法,可能理解的不够好。还需要多看看。
2.PTA实验作业(4分)
2.1 题目1:6-3 二叉搜索树中的最近公共祖先
2.2 设计思路(伪代码或流程图)
1.定义全局变量和一个新的查找函数
2。(祖先函数)
空树返回ERROR;
第一次遍历树,用查找函数判断所要找的孩子节点是否在树中,不在返回ERROR;
if u,v分别大于此时的根节点,说明该节点为其共同祖先;
if u,v都比它小,递归T->Left;
if u,v都比它大,递归T->Right;
3.(查找函数)
if T为NULL,没找到,返回1;
if T->key等于u或v,已找到,返回2;
if T->key小于u或v,递归右子树;
if T->key大于u或v,递归左子树;
2.3 代码截图
2.4 PTA提交列表说明。
一开始没有想到可以用u,v的数值是否大于当前节点的做法来打代码,一直在想怎么递归遍历所有节点,所以想的不全,部分正确,后来就换了一种思路,差的三分是因为没有判断u,v是否都在树中,所以添加了一个新的查找函数。
2.1 题目1:6-2 是否二叉搜索树
2.2 设计思路(伪代码或流程图)
1.空树返回NULL;
2.定义一个树指针p;
3. if 树 T 的左子树不为空{
P指向树T的左子树
while(P的右子树不为空)P指针指向树T的左子树的最大节点;
比较此时 P 和 T 的数值;
if(P的节点数值大于T的节点数值)返回false;else 递归左子树;
}(第一个if结束)
4. if 树T的右子树不为空{
内容同上左子树;
此时P要找的是右子树的最小节点;
递归右子树;
}(if 结束)
5. else 返回false;(此时节点左右子树都为空 )
6. 返回 true;
2.3 代码截图
2.4 PTA提交列表说明。
这道题我截图的是自己部分正确的写法,这个写法我调整了很多次,其中最大的错误是,没有添加 检查左子树的最大节点是否大于根节点的 代码,但是添加了这个步骤后还是部分正确,不知道测试点0应该怎么改,于是请教同学换了新的写法。
2.1 题目1:7-1 QQ帐户的申请与登陆
2.2 设计思路(伪代码或流程图)
1.定义整型变量N,i,字符型数组 ch[1],PN[11],PW[17];
2.输入N;
3.while(N不等于0){
输入ch;
4. if ch[0]==‘N’){
输入账号密码;
if(Q不是空的)说明已注册过,输出ERROR;
else 注册成功,账号Q[PN]填入对应的密码,输出OK;
}
5. if(ch[0]==‘L'){
输入账号密码;
if(Q[PN]是空的)说明还没注册过,输入Not Exist;
else if 账号密码不匹配 密码输入错误;
else 登陆成功 输出OK;
}
6. }(while循环结束)
2.3 代码截图
2.4 PTA提交列表说明。
这道题一开始我不会用map,所以总是想着如何将注册好的账户和密码存储起来,又要如何查找,后来发现大家都在使用map,就上网搜了map和#include <bits/stdc++.h>,并照着这个写法写,答案错误是在判断输入字符是N还是L的时候,我一开始用的是字符 ch 来判断,但是这种写法貌似根本无法输入,就换成ch[1],不理解为什么ch不行。
3.截图本周题目集的PTA最后排名(3分)
本次题目集总分:175分
必做题共:145分
3.1 PTA排名(截图带自己名字的排名)
3.2 我的总分:
120分
4. 阅读代码(必做,1分)
给出a,b,c,d然后求出x1,x2,x3,x4有多少组解