DS博客作业07--查找

1.本周学习总结(0--2分)

1.1思维导图

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

在学习查找的过程中发现自己的平时学习的不足和薄弱之处,从而加深自己。
折半查找、分块查找(索引顺序查找)、二叉排序树(Binary Search Tree 二叉搜索树等
在二叉排序树插入关键字代码中需要注意:
空树:直接插入新结点返回成功
树不空:检查是否存在关键字重复的结点
存在:返回插入失败
不存在:检查根结点的值和待插入关键字值的大小关系递归插入左右子树中

2.PTA实验作业(6分)

2.1.题目1:题目名称

6-1 二叉搜索树的操作集

2.1.1设计思路(伪代码)

BinTree Insert( BinTree BST, ElementType X )
    if(!BST)//如果BST为空的话,返回只有一个节点的树
    else//如果BST不是为空的话
    //开始寻找要插入的位置
BinTree Delete( BinTree BST, ElementType X )
    if(!BST) 输出"Not Found
")
    //考虑如果找到这个位置,并且有左节点或者右节点或者没有节点三种情况
   /* 在右子树中找到最小结点填充删除结点 */
  /* 被删除结点有一个或没有子结点*/

2.1.2代码截图(注意,截图,截图,截图。不要粘贴博客上。)




2.1.3本题PTA提交列表说明。

Q1:在删除那个函数里面判断X是否大于或小于BST->Data时忽略了小于这个情况,只过空树那个测试点;
A2:添加一个判断条件,else if(X>BST->Data)BST->Right=Delete(BST->Right,X);//小于错误 就修正了错误;

2.2 题目2同题目1

6-2 是否二叉搜索树

2.2.1设计思路(伪代码)

中序遍历二叉树
{
if T存在
递归遍历左孩子
得到的数据放入数组a
递归遍历右孩子
}
判断数组a是否升序
{
if(T->Left)//找该点左子树最大值
if(T->Right)//找该点右子树最大值
}

2.2.2代码截图(注意,截图,截图,截图。不要粘贴博客上。)

2.2.3本题PTA提交列表说明。

Q1:没考虑空树这种情况,看了题目后说空树也是二叉树,
A1:空树时,或左右子树都为空时要返回false;

2.3 题目3

二叉搜索树中的最近公共祖先

2.3.1设计思路(伪代码)

while(p!=NULL)
if(isHere==0) //二叉树没有u return REEOR//找不到
end if(isHere==0) //二叉树没有v
Key的大小在v和u之间,那T就是公共祖先 return T->Key
Key等于u和v中的一个,那T也是祖先 return T->Key
如果Key比u和v小,去右孩子找祖先
如果Key比u和v大,去左孩子找祖先
前面的判断中不能跳出,则找不到 return ERROR

2.3.2代码截图(注意,截图,截图,截图。不要粘贴博客上。)



2.3.3本题PTA提交列表说明。

Q1:发现return 0写到了while里面,导致运行一次就结束
Q2:格式错误,把输出样例复制就解决了;

3、阅读代码(-2--2分)

找一份和查找运算相关代码,谈谈你对这个代码认识体会。

考研题种关于查找、二叉搜索树内容。
ACM、PTA天梯赛、leecode面试刷题网站,找查找相关题目阅读分析。
请按照下面内容填写代码阅读内容。请未必认真完成,如果发现应付,没有介绍代码思路、体会等扣分。

3.1 题目

插值查找

3.2 解题思路

插值查找是在折半查找的基础上进行优化,将mid的值low + high/2 修改为low+(high-low)*(key-R[low])/R[high]-R[low]
将查找关键字于查找表中的最大最小关键字对比后进行查找。
时间复杂度为O(log n)

3.3 代码截图


3.4 学习体会

插值查找法:适用于分布均匀的数据中查找,也得是从小到大分布均匀,比如说成绩喽。
是按照数据位置的分布并利用公式Between = low + (key - data[low])/(data[high] - data[low]) * (high - low)
预测数据的所在位置。

原文地址:https://www.cnblogs.com/jellysheep/p/11032529.html