zoukankan      html  css  js  c++  java
  • 【刷题-考研上机模拟】树专题、概念专题解题更新

    更新:

    (B题)判断两棵树是否相同时,也可以用中序序列+另一序列是否相同判断,本题中中序序列一定相同,只用比较另一个序列是否相同

    概念专题

    (D题)
    1. 判断是否为bst时,可以直接中序遍历得到中序序列,如果中序序列是否有序(中序序列有序的树一定是bst,无序一定不是,具有一一对应的判定关系)

    //lastValue初始为-1
    bool isbst(int idx, int lastValue) {
        if(idx == -1) return true;                          // 空树是BST
        return checkBST(node[idx].left, lastValue)          // 判断左子树是否是BST
               && node[idx].K > lastValue                   // 当前结点的K值比中序遍历过程中上一个结点的K值大
               && checkBST(node[idx].right, node[idx].K);   // 判断右子树是否是BST(对右子树来说lastValue是当前结点的K值)
    

    2. 判断是否为堆,本质为后序遍历,子树都是堆并且根节点值最大时,树是堆。参考代码中用一个checkMaxHeap变量减小了一半的代码量

    // 比较node[root].V是否大于或小于node[subNode].V
    bool compareV(int root, int subNode, bool checkMaxHeap) {
        if(subNode == -1) return true;                                  // subNode为空时总是满足,以使其不影响checkHeap的结果
        else if(checkMaxHeap) return node[root].V > node[subNode].V;    // 检查大根堆时判断root的V是否大于subNode的V
        else return node[root].V < node[subNode].V;                     // 检查小根堆时判断root的V是否小于subNode的V
    }
    // 检查是否是堆,本质是后序遍历,其中idx为当前字数的根节点编号,checkMaxHeap当检查大(小)根堆时为true(false)
    bool checkHeap(int idx, bool checkMaxHeap) {
        if(idx == -1) return true;                                  // 空树是堆
        return checkHeap(node[idx].left, checkMaxHeap)              // 判断左子树是否是堆
               && checkHeap(node[idx].right, checkMaxHeap)          // 判断右子树是否是堆
               && compareV(idx, node[idx].left, checkMaxHeap)       // 当前结点的V值比左子树的最大(小)值大(小)
               && compareV(idx, node[idx].right, checkMaxHeap);     // 当前结点的V值比由子树的最大(小)值大(小)
    }
    

    参考:
    2019 浙大计算机考研机试模拟赛(1)——树专题 解题报告
    2019 浙大计算机考研机试模拟赛(2) 概念专题解题报告

  • 相关阅读:
    解决OpenERP依赖库问题
    用TcpTrace监控OpenERP客户端和服务器之间的通信
    Python相关文章索引
    将OpenERP日志输出到控制台
    培训模块(1):基本框架/教师管理
    点抽稀
    资源
    sharpMap学习笔记之一
    用openlayer显示google地图
    Map Tile 地图切片小工具
  • 原文地址:https://www.cnblogs.com/vinnson/p/10845008.html
Copyright © 2011-2022 走看看