zoukankan      html  css  js  c++  java
  • DS博客作业07--查找

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

    1.1.思维导图


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

    这最后的这两周学习了查找,对一个元素的增删改,首先需要的就是需要查找,查找用关键字标识的一个数据元素,查找时根据给定的某个值,在表中确定一个关键字的值等于给定值的记录或数据元素。
    在这章的学习里,有比较熟悉的线性表查找,数表查找运用了二叉树结构,二叉排序树的查找和树形有关,可以将其调整为平衡二叉树,根据失衡点,进行LL,RR,LR,RL三种调整,对于
    树的节点增删改都是查找的重要要点
    哈希表查找,之前有提过哈希数组,时间复杂度可以达到O(1),但是缺点就是要解决哈希冲突的问题,相对应的解决冲突的方法在上面的思维导图有提到
    

    2.PTA实验作业(6分)

    本周要求挑3道题目写设计思路、调试过程。设计思路用伪代码描述。题目选做要求:原则上题目选择越难,代码量越大分值越高。
    

    2.1.题目1: 是否二叉搜索树 (25 分)

    2.1.1设计思路(伪代码)

    bool IsBST ( BinTree T )
    {
        if(非树或者非树的左右孩子)
        return true;
        定义树型 TLeft, TRight;
        if(树的左孩子)
        TLeft 往下走 该点左子树最大值;
        if(树的右孩子)
        TRight往下走 该点右子树最大值;
    返回 (T->Left?(T->Data>TLeft->Data):1)&&(T->Right?(T->Data<TRight->Data):1);
    
    }
    

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

    2.1.3本题PTA提交列表说明。


    Q:一开始对左孩子的情况没有考虑进去
    A:while(TLeft->Right) TLeft = TLeft->Right;

    2.2.题目1二叉搜索树中的最近公共祖先 (25 分)

    2.2.1设计思路(伪代码)

    int Find( Tree T,int u)
    {
        if(树为空)
        return 0;
        if(关键字>u) return Find(T->Left,u);
        if(关键字<u) return Find(T->Right,u);
        if(关键字=u) return 1;
    }
    int LCA( Tree T,  int u, int v )
    {
         if(树为空)
        返回 ERROR;
        if要查找的数存在
        遍历到的结点大小在v和u之间,则该节点就是祖先
        return T->Key;
        遍历到的结点大小在v和u之间,则该节点就是祖先
        return T->Key;
        以下两个if表示两个结同在遍历到的结点的一侧
        return LCA(T->Right,u,v);
        否则: return LCA(T->Left,u,v)
        end if
    返回 ERROR;
    }
    

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

    2.2.3本题PTA提交列表说明。


    A:共同的祖先节点的关键在于向下的孩子们的关系

    2.3.题目1:航空公司VIP客户查询 (25 分)

    2.3.1设计思路(伪代码)

    #include<bits/stdc++.h>(万能的编译预头,几乎包含所以的c/c++头文件)
        map<string,int> m
        定义 n,mi,k,e;
        定义string类 s;
    int main()
    {
        s.resize(20)(指定容器有效的元素个数20)
        输入n mi
        for(0 to n)
            身份证号码输入进s数组中;
            输入最低里程k,	if(k<mi) k=mi;
            m[s] += k;
        end for
        while(e to o)
       身份证号码输入进s数组中;
       定义we=m[s];
        if(不为we)输出”No Info“;
        else 输出 m[s];
    
    

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

    2.3.3本题PTA提交列表说明。


    Q:这题难点在于对身份证这个常常的字符串的处理
    A:使用图和string类可以大大简短代码量

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

    找一份和查找运算相关代码,谈谈你对这个代码认识体会。考研题种关于查找、二叉搜索树内容。
    

    3.1 题目

    3.2 解题思路

    解法一,递归法:
    递归方法是分别遍历一个节点的右节点和左节点,因为是从右边看过来,所以我们需要首先遍历右节点。这里有个疑问,当遍历左节点时候,怎么判定它右边没有其他节点了呢?这里我们用到一个变量level,
    对于同一层的节点,如果res数组的大小已经等于level了,说明右边已经有节点存入数组了,该节点就不用再保存。一直递归下去就可以得到结果
    
    解法二,非递归法:
    这道题要求我们打印出二叉树每一行最右边的一个数字,实际上是求二叉树层序遍历的一种变形,我们只需要保存每一层最右边的数字即可,还是需要用到数据结构队列queue,遍历每层的节点时,
    把下一层的节点都存入到queue中,每当开始新一层节点的遍历之前,先把新一层最后一个节点值存到结果中
    
    

    3.3 代码截图

    递归方法:

    非递归方法:

    3.4 学习体会

    
        二叉树的右视图,相当于对二叉树进行层序遍历,将每一层的最后一个节点存入最终的结果即可,递归法与非递归法都有特点,不过递归法更加贴近二叉树的常规做法
    
    
    • 题目以及解法来源于 力扣网。
  • 相关阅读:
    Convolution1D与Convolution2D区别
    git
    cast函数
    Ubuntu14.04编译WebRTC For Android代码 2014-07-24
    R语言基础-数组和列表
    疯狂的创业运动
    Autodesk 举办的 Revit 2015 二次开发速成( 1.5 天),教室培训, 地点武汉
    注冊(十一)重注冊带有鉴权信息
    ubuntu14.04无法安装Curl
    Bash脚本中的操作符
  • 原文地址:https://www.cnblogs.com/asings/p/11032056.html
Copyright © 2011-2022 走看看