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)
预测数据的所在位置。