博客
关于我
PAT--1043 Is It a Binary Search Tree(二叉排序树的建立与判定)
阅读量:197 次
发布时间:2019-02-28

本文共 1917 字,大约阅读时间需要 6 分钟。

如何判断一个输入序列是否是一颗二叉排序树的前序序列或是其镜像树的前序序列?以下是详细的解决方法。

方法一:构建两棵树并进行前序遍历

  • 构建二叉排序树和镜像树

    • 二叉排序树:按照递增顺序插入节点。
    • 镜像树:将左子树和右子树的顺序调换,插入时右边为左,左边为右。
  • 前序遍历

    • 对二叉排序树和镜像树分别进行前序遍历,记录结果。
    • 比较输入序列与两棵树的前序结果,如果匹配则输出“YES”,否则输出“NO”。
  • 方法二:利用后序遍历的反转

  • 构建二叉排序树

    • 按照递增顺序插入节点。
  • 后序遍历

    • 记录节点的后序访问顺序。
  • 生成镜像树的前序序列

    • 将二叉排序树的后序结果反转,得到镜像树的前序序列。
  • 比较

    • 输入序列与反转后的后序结果进行比较,若匹配则输出“YES”,否则输出“NO”。
  • 代码实现

    #include 
    #include
    #include
    using namespace std;struct Node { Node* lchild, *rchild; int num;};vector
    inpVec;Node* create(int v) { Node* root = new Node(); root->lchild = root->rchild = NULL; root->num = v; return root;}Node* insert1(Node* root, int v) { if (!root) return create(v); if (v < root->num) root->lchild = insert1(root->lchild, v); else root->rchild = insert1(root->rchild, v); return root;}Node* insert2(Node* root, int v) { if (!root) return create(v); if (v > root->num) root->lchild = insert2(root->lchild, v); else root->rchild = insert2(root->rchild, v); return root;}void preOrder(Node* root, vector
    & vec) { vec.push_back(root->num); if (root->lchild) preOrder(root->lchild, vec); if (root->rchild) preOrder(root->rchild, vec);}int main() { int n; scanf("%d", &n); Node* root1 = NULL, *root2 = NULL; for (int i = 0; i < n; ++i) { int k; scanf("%d", &k); inpVec.push_back(k); root1 = insert1(root1, k); root2 = insert2(root2, k); } vector
    preVec, mipreVec; preOrder(root1, preVec); preOrder(root2, mipreVec); if (inpVec == preVec) { printf("YES\n"); } else if (inpVec == mipreVec) { printf("YES\n"); } else { printf("NO\n"); } return 0;}

    代码解释

  • 结构体Node 包含左、右孩子和数值,用于构建树。
  • 创建节点create 函数初始化一个新节点。
  • 插入节点insert1insert2 分别用于构建二叉排序树和镜像树。
  • 前序遍历preOrder 记录前序访问顺序。
  • 主函数:读取输入,构建树并进行遍历,比较结果输出判断。
  • 这种方法通过构建两棵树并比较前序结果,确保输入序列符合要求。另外,利用后序遍历反转的方法可以简化镜像树的构建过程,提高效率。

    转载地址:http://inrn.baihongyu.com/

    你可能感兴趣的文章
    npm的“--force“和“--legacy-peer-deps“参数
    查看>>
    npm的安装和更新---npm工作笔记002
    查看>>
    npm的常用操作---npm工作笔记003
    查看>>
    npm的常用配置项---npm工作笔记004
    查看>>
    npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
    查看>>
    npm编译报错You may need an additional loader to handle the result of these loaders
    查看>>
    npm设置淘宝镜像、升级等
    查看>>
    npm设置源地址,npm官方地址
    查看>>
    npm设置镜像如淘宝:http://npm.taobao.org/
    查看>>
    npm配置安装最新淘宝镜像,旧镜像会errror
    查看>>
    NPM酷库052:sax,按流解析XML
    查看>>
    npm错误 gyp错误 vs版本不对 msvs_version不兼容
    查看>>
    npm错误Error: Cannot find module ‘postcss-loader‘
    查看>>
    npm,yarn,cnpm 的区别
    查看>>
    NPOI
    查看>>
    NPOI之Excel——合并单元格、设置样式、输入公式
    查看>>
    NPOI初级教程
    查看>>
    NPOI利用多任务模式分批写入多个Excel
    查看>>
    NPOI在Excel中插入图片
    查看>>
    NPOI将某个程序段耗时插入Excel
    查看>>