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

    1.本周学习总结##

    1.思维导图##

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

    本章主要的知识就是第三部分树表的查找,包含:
    ①二叉排序树(特点:中序遍历后为有序序列)   在二叉排序树的删除步骤中,为保证树的有序性需要先判断删除结点的左右孩子情况,为空或一方为空,可以通过直接删除或非空子树替代删除:左右孩子不为空,则需要分布考虑
    ②平衡二叉树 特点平衡因子(结点的左右孩子高度差)≤1, 平衡二叉树的调整方法有:LL,RR,LR,RL调整
    还有哈希表的查找:查找成功ASL=探测次数之和/哈希表中已有关键字之和    查找不成功ASL=关键字查找不成功次数之和/哈希表长度
    

    2.PTA实验作业##

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

    2.1.1设计思路(伪代码)##

    BinTree Delete(BinTree BST,ElementType X)
    {
        定义tmp树结点
        if树空,直接输出"Not Found“
        else 找到要删除的X对应结点位置
        if X>当前结点 递归调用 Delete(BST->Right,X)
        if X<当前结点 递归调用 Delete(BST->Left,X)
        else if X=当前结点   判断当前结点左右孩子是否为空       
                if 左右孩子不空  
        调用函数FindMin(BST->Right)
        tmp->Data=BST->Data 保存数据
        BST树的右孩子置为结点 保证二叉搜索树的有序性
               else if
                       if左孩子为空, 右孩子置为结点
                       if右孩子为空,右孩子置为结点
        return BST
    }
    

    2.1.2代码截图##



    2.1.3本题PTA提交列表说明##

    Q1:答案错误
    A1:在判断树为空后,没有返回NULL,以及函数递归调用结点不正确,修改后改正
    Q2:段错误:在删除结点函数中,考虑结点左右孩子不为空的情况,没有定义新的树结点来存储要删除结点
    A2:定义新的树结点之后,在函数结束后释放释放结点的所占用的空间
    

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

    2.2.1设计思路(伪代码)##

    int LCA(Tree T,int u,int v)
    {
        if T 为空,返回 ERROR
        else if   (Find(T,u)且Find(T,v))   结点在树中
        if T->key>u且T->key<v且T->key>v且T->key<u   返回 结点T-key  
                end if
        if T->key=u或T->key=v  返回 结点T->key  
                end if
        if T->key>u或T->key>v 递归函数LCA(T->Left,u,v)   
                end if
        if T->key<u且T->key<v 递归函数LCA(T->Right,u,v)   
                end if
                     end if
        返回ERROR
    }
    

    2.2.2代码截图##

    2.2.3本题PTA提交列表说明##

    Q:部分正确 :测试点2:ERROR重定义  测试点6:两结点重合,但不在树中	  答案错误
    A:树空以及结点为找到返回值从-1改为ERROR,结点重合的判断条件只需要判断一个即可,将”&&“改为”||“
    

    2.3.题目:##

    2.3.1设计思路(伪代码)##

    2.3.2代码截图##

    2.3.3本题PTA提交列表说明##

    3、阅读代码##

    3.1 题目##

    给定一个二叉树,判断它是否是高度平衡的二叉树。
    本题中,一棵高度平衡二叉树定义为:
    一个二叉树每个节点 的左右两个子树的高度差的##绝对值##不超过1。
    

    3.2 解题思路##

    先判断根结点,如果只有一个,则为1;
    否则看左子树的深度减去右子树的深度等不等于1;
    如果等于1,那么这颗二叉树就是平衡二叉树;
    它的深度等于左右子数最大的深度+1;
    

    3.3 代码截图##

    3.4 学习体会##

    判断平衡二叉树,可以将二叉树拆分为左右子树两部分,通过递归调用函数分别判断左右子树是否也是平衡二叉树,进而判断整棵二叉树是否为平衡二叉树。题目要求平衡因子绝对值小于等于1,这里就需要运用到库函数 abs()给平衡因子加绝对值
    
  • 相关阅读:
    Oracle 的四种连接-左外连接、右外连接、内连接、全连接
    选择文件错误提示
    window 窗口编辑
    BufferedWriter与BufferedRead --------------------------Test2
    BufferedWriter与BufferedRead --------------------------Test
    BufferedInputStream 缓冲输入字节流 -------上
    IO异常 的处理 test
    IO异常 的处理
    Struts2概述、开发环境搭建
    Operation(自定义多线程)
  • 原文地址:https://www.cnblogs.com/455j/p/11032707.html
Copyright © 2011-2022 走看看