博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DS博客作业07--查找
阅读量:6260 次
发布时间:2019-06-22

本文共 3055 字,大约阅读时间需要 10 分钟。

1.思维导图及学习体会

1思维导图

1474872-20190622143105239-66963828.png

2.谈谈你对查找运算的认识及学习体会

  • 在查找的学习中,学到了很多种查找的方法,如线性表的查找中就有三种查找方法:顺序查找(这个方法就是我们一般还没学习查找以前最容易想到的方法),折半查找(或者叫二分查找)和分块查找,折半查找是顺序查找的一种改进,时间复杂度达到了O(nlog2n),效率上有了一定的进步。还有树表上的查找,二叉排序树,平衡树的构建,插入,删除;哈希表查找,哈希函数构造方法中的除留余数法会比较侧重一点,还有查找中学会计算成功与不成功的ASL。
  • 最近学的东西好像比较多的偏向于理论,还有就是要画图,课堂派作业锻炼了我的电脑画图的能力,查找要学的画图的地方还挺多的,比如画二叉排序树,画平衡二叉树,还有插入的多个调整,LL,LR,RL,RR型的调整,这个比较需要花点功夫去理解,还有B-树的插入删除,这个地方我经常画错,需要好好再复习一下。

2.PTA实验作业

2.1.题目1:二叉搜索树的操作集

1474872-20190622224029425-2048823520.png

2.1.1设计思路(伪代码)

BinTree Insert( BinTree BST, ElementType X ){         if 空树 then     建立节点     else//不是空树     根据X的大小建立左右节点} BinTree Delete( BinTree BST, ElementType X ){    if 找到最后都没找到       输出  "Not Found\n"    else        比较字符大小,进行递归        找到节点时        删除节点并用合适的节点代替    return BST;}Position Find( BinTree BST, ElementType X ){    if 树空        return  NULL;        if X比节点大           找右孩子        if X比节点小           找左孩子        if X和节点相同           return该结点}Position FindMin( BinTree BST ){    if  树不空       递归找左孩子直到没有左孩子    return BST; }Position FindMax( BinTree BST ){    if  树不空       递归找右孩子直到没有右孩子     return BST;}

2.1.2代码截图

1474872-20190622212811751-2089416541.png

1474872-20190622220646693-683766348.png
1474872-20190622220717457-1454397375.png
1474872-20190622220738720-885972032.png

2.1.3本题PTA提交列表说明。

1474872-20190622223423176-1733365047.png

Q1:记得return很重要

A1:在插完的时候没有return,什么都没变,然后一直看自己有没有插错,就是忘了return
Q2:写Position Find函数循环时的条件
A2:要不等于该节点且树不为空,不要想着不等于节点就忘了树空的情况

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

1474872-20190622224103608-1914953670.png

2.2.1设计思路(伪代码)

int Find(Tree T, int u)    if  T为空 then  不存在        return 0    if  x 等于 u then        return 1    if  x 大于 u        递归找左孩子;     if  x 小于 u        递归找右孩子; int LCA(Tree T, int u, int v)    if  T 为空 then          返回ERROR     if 不在树中        返回ERROR    if  刚好等于本身         返回 T->Key    if  在两数之间        返回 T->Key    if  比最大还大 then                     递归找左孩子;     if  比最小还小 then         递归找右孩子;

2.2.2代码截图

1474872-20190622143047130-881205163.png

2.2.3本题PTA提交列表说明。

1474872-20190622143333256-125776568.png

Q1:判断该元素是否在树中

A1:刚开始没有考虑的元素是否在树中这件事,后来经过老师讲评知道可以自己写一个函数进行判断
Q2:return什么要注意!
1474872-20190622143946008-1847085292.png

A2:题目要求空树时return ERROR,但我看是int型函数就return 0,然后就错了

Q3:要判断好">","<"的关系
A3:熟悉二叉搜索树的性质左边小右边大

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

1474872-20190622224124736-314164703.png

2.3.1设计思路(伪代码)

输入 nfor i=0 to n then    输入type,username,password    if type=="L" then  新建号码        找不到id时        输出"ERROR: Not Exist"        账号密码不匹配时           输出"ERROR: Wrong PW"        否则           输出"Login: OK"  登陆成功         当找不到id时              s[id]置为password              输出"New: OK"        否则             输出"ERROR: Exist"    else   //注册号码       当找不到id时            s[id]置为password            输出"New: OK"        否则        输出"ERROR: Exist"    end if end for

2.3.2代码截图

1474872-20190622151454569-898276965.png

1474872-20190622151516575-2070496951.png

2.3.3本题PTA提交列表说明。

1474872-20190622151326346-1411047419.png

Q1:用什么方法可以查找的时候不需写一堆的循环然后直到找到或遍历完呢

A1:可以使用map函数,使用map函数一些遍历查找的过程就不需要我们去写,用find()和end()就可以实现判断是否存在等功能
Q2:怎么实现一个账号对一个密码
A2:用map函数设一个变量,下标为账号,其中元素为密码。

3阅读代码

3.1 题目:出现次数最多的子树元素和

给出二叉树的根,找出出现次数最多的子树元素和。一个结点的子树元素和定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。然后求出出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的元素

1474872-20190622184838264-1123374341.png

3.2 解题思路

该题的意思是求出二叉树所有子树(包括包含根节点的树)的元素和,然后求出出现元素和次数最多的那些。因为需要求子树,所以肯定是递归最为方便。两个阶段:1.遍历二叉树,为每个和统计出现次数,记录在map中2.遍历map,将最大的值存到vector中

3.3 代码截图

1474872-20190622185122031-913653398.png

3.4 学习体会

  • 在这段代码中使用了STL的一个关联容器map,map提供一对一的数据处理能力,它在我们处理一对一数据的时候很方便,以前老师有多次提到map,但是还是很少去用到它,有时还是去使用一些比较复杂的方法,在前面的PTA题目”QQ帐户的申请与登陆“那题尝试用了一下,然后再通过这段代码再好好学习一下;代码中还使用了vector ,也是STL的一个容器,vector可以容纳许多类型的数据,看起来很方便的样子,老师有介绍过但自己没有用过这个容器,通过代码学一下。也见识到了STL容器可以减少很多代码量。

转载于:https://www.cnblogs.com/linshuxin1761/p/11032646.html

你可能感兴趣的文章
阿里巴巴CI:CD之分层自动化实践之路
查看>>
HDU 1060:Leftmost Digit
查看>>
numpy利用数组进行数据处理
查看>>
【转】TCP 网络状态图详解
查看>>
SQL Server之 (二) SQL语句 模糊查询 空值处理 聚合函数
查看>>
All about Using Burp Suite
查看>>
Nikto and whatweb
查看>>
无人值守工业控制系统网络安全解决方案
查看>>
c#设计模式之:外观模式(Facade)
查看>>
macvtap与vhost-net技术
查看>>
解决DESCryptoServiceProvider加解密时弱密钥异常
查看>>
Linux远程登录ssh免密码配置方法(仅供参考)
查看>>
validateJarFile jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet
查看>>
html5学习笔记——html保留标签(二)
查看>>
二分图判定--黑白染色
查看>>
ios 处理 touch 事件时偶尔的击穿现象
查看>>
第105天:Ajax 客户端与服务器基本知识
查看>>
LeetCode70——爬楼梯
查看>>
windows phone 中的TextBlock的一些特性(TextWrapping,TextWrapping)
查看>>
引用类型起的锅
查看>>