DS博客作业07--查找

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

1.思维导图

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

这两周学了很多查找方面的知识,查找是一个很重要的学习板块,查找分为线性表查找,树表查找,哈希表查找等,顺序表查找包括顺序查找,折半查找,索引存储结构和分块查找,其中索引存储结构和分块查找的执行效率高,广泛用于搜素引擎,字典就是分块查找的应用。树表查找分为二叉排序树,平衡二叉树,B-树和B+树,二叉排序树的操作较多,需要重点掌握。哈希查找是执行效率高的查找。哈希冲突的解决方法有开放地址法和拉链法。

2.PTA实验作业(6分)

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

2.1.1设计思路

BinTree Insert( BinTree BST, ElementType X )
{
	if(!BST){
        如果是空树建立节点
    }
    根据数据大小建立左右节点
}
 
BinTree Delete( BinTree BST, ElementType X )
{
    if(BST==NULL)
    {
    	printf("Not Found
");
	}
	else
	{
              比较字符大小,不断查找节点
              找到节点时,通过课本上讲的方法,删除节点并用合适的节点代替该节点的位置
	}
	return BST;
}
Position Find( BinTree BST, ElementType X )
{
	if(BST==NULL)
	    return  NULL;
	X比节点数据大,则遍历右孩子
        X比节点数据小,则遍历左孩子
        X和节点数据相同则return该结点
}
Position FindMin( BinTree BST )
{
	if(BST){
       不断地找左孩子直到没有左孩子
    }
}
Position FindMax( BinTree BST )
{
	if(BST)
	{
		不断地找右孩子直到没有右孩子
	}
}

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

2.1.3本题PTA提交列表说明。

Q1:本题在一开始设计得时候一直出现段错误。
A1:查找结果的过程中发现,本题缺乏对节点是否为空的判断,导致出现段错误。
Q2:之后调试,有一些答案错误。
A2:答案错误的原因是在建树的时候我犯了低级错误,使用可两个Right。

2.2 题目2:6-2 是否二叉搜索树

2.2.1设计思路

bool IsBST ( BinTree T )
{
     遍历节点,当节点为空时二叉树为空
     对节点进行判断,如果左子树的子节点大于根节点或者右子树的子节点大于根节点,则非二叉搜索树
     利用递归层层遍历子节点,如果出现左孩子大于根或者右孩子小于根,则不是二叉搜索树。
}

2.2.2代码截图

2.2.3提交列表

Q1:本题出现多种答案错误。
A1:调试了好几次,检查了好几次,发现代码没有明显错误,重新阅读题目,发觉审题出现错误,搜索二叉树的左节点的孩子全部要比根节点小,右孩子的孩子全部要比根节点大,新添加一段代码,得出正确答案

2.3 题目3:6-3 二叉搜索树中的最近公共祖先

2.3.1设计思路

int Find(Tree T,int x)
{
     判断是否有节点存在
}
int LCA( Tree T,  int u, int v )
{
	树为空或找不到目标节点,返回error
	根据搜索树的规律,祖先节点的数据的大小必然在两个节点之间,同时最先出现的那个为祖先节点。
}

2.3.2代码截图

2.3.3提交列表

Q1:本道题理解起来比较困难,寻找共同且最近的祖先节点是什么意思。我一开始想不到设计思路
A1:参考网上的代码,其实题目没有那么难,本题为二叉搜索树,祖先节点的大小必定在两个查找数据之内,只要先确认查找 的数据是否存在,再和根节点进行比较,最后得出答案。

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

3.1 题目

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"
示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:

所有输入只包含小写字母 a-z 。

3.2 解题思路

找到最短字符串,以它的长度为基准,从所有字符串的第一个字符开始对比,若都一样,ans加上该字符,若不一样,返回答案;

3.3 代码截图

3.4 学习体会

本道题涉及stl容器,在解决时可用多种方法,本题应用得解题方法时间复杂度为O(n的平方),可以解题,在string容器方面的使用值得学习。string min=str[0]这一步写的好,为求最短的串,把二维数组化为一维数组。本题在执行方面,先求出最短串的长度,无形中避免了许多不必要的操作,增加了执行效率。之后进行比较,一有不匹配的就跳出循环。

原文地址:https://www.cnblogs.com/1112wlt/p/11031880.html