• 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]这一步写的好,为求最短的串,把二维数组化为一维数组。本题在执行方面,先求出最短串的长度,无形中避免了许多不必要的操作,增加了执行效率。之后进行比较,一有不匹配的就跳出循环。

  • 相关阅读:
    ELK初学搭建(logstash)
    认识基本的UI资源
    C# 枚举器
    NGUI---使用脚本控制聊天系统的内容显示,输入事件交互
    NGUI----简单聊天系统一
    C# 类型、存储和变量
    C# Execl表格文件转xml文件
    网易云音乐如何从0到亿级用户整理笔记
    如何成为一名完美的传道授业解惑者
    grouping sets,cube,rollup,grouping__id,group by
  • 原文地址:https://www.cnblogs.com/1112wlt/p/11031880.html
Copyright © 2020-2023  润新知