博客作业05--查找
1.学习总结
1.1查找的思维导图
1.2 查找学习体会
对于查找的内容,在代码方面,感觉多数代码都会采用递归,代码的难度也比较高,不好记;而对于一些纸面上的计算,例如计算AVL,画二叉排序树,哈希表等难度还算可以
2.PTA实验作业
2.1 题目1:6-2 是否二叉搜索树
2.2 设计思路
如果树空或者只有一个根结点,则其为二叉搜索树
令p等于T的左孩子
if(p存在)
将p移动到T左子树最右的位置,即T左子树的最大值
如果p的值比T大,返回false
end if
令p等于T的右孩子
if(p存在)
将p移动到T右子树最左的位置,即T右子树的最小值
如果p的值比T小,返回false
end if
递归判断T的左右子树是否成立
2.3 代码截图
2.4 PTA提交列表说明
我一开始认为要将当前结点与他的左右孩子比较,如果符合二叉搜索树的条件即可,但这样实际上行不通,输出有误;后来我发现将当前结点与左子树的最大结点和右子树的最小结点比较,只要符合二叉搜索树条件,那么递归到最后,所有结点都会符合二叉搜索树的条件
2.1 题目2:6-3 二叉搜索树中的最近公共祖先
2.2 设计思路
先构造一个判断某个值是否在树T上的函数
如果树空 返回ERROR
如果u或者v不再树上 返回ERROR
如果u和v都在左子树,那么就在左子树寻找他们的公共祖先(即递归查找)
如果u和v都在右子树,那么就在右子树寻找他们的公共祖先(即递归查找)
其他情况则公共祖先为根节点T
2.3 代码截图
2.4 PTA提交列表说明
一开始,我忘了判断u和v不在树上的情况;然后我想加上不在树的情况时发现不知道怎么写,因为它只有一个函数;后来,我舍友告诉我可以用两个函数= =
2.1 题目3:7-1 QQ帐户的申请与登陆
2.2 设计思路
定义两个map,一个q代表QQ账号,一个p代表QQ密码(其中QQ账号用字符串表示)
输入n
while(n--)
{
输入操作类型,QQ账号和密码
如果操作类型为N
{
如果(q[qqnumber]==0) 说明账号不存在
如果(p[qqnumber]!=password) 说明密码错误
否则 登录成功
}
否则
{
如果(q[qqnumber]==1) 说明账号已经存在
否则 令 q[qqnumber]=1(代表账号申请成功) p[qqnumber]=password
}
}
2.3 代码截图
2.4 PTA提交列表说明
我一开始map的关键字用的类型是int,但是这样最后一个测试点老是过不去,后来把它换成string后就可以了
3.截图本周题目集的PTA最后排名
3.1 PTA排名
3.2 我的总分:120
4. 阅读代码
应用哈希表快速进行查找,节省时间;其中哈希函数用除留余数法构造,用伪随机探测再散列发处理冲突。