博客
关于我
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 函数初始化一个新节点。
  • 插入节点:insert1 和 insert2 分别用于构建二叉排序树和镜像树。
  • 前序遍历:preOrder 记录前序访问顺序。
  • 主函数:读取输入,构建树并进行遍历,比较结果输出判断。
  • 这种方法通过构建两棵树并比较前序结果,确保输入序列符合要求。另外,利用后序遍历反转的方法可以简化镜像树的构建过程,提高效率。

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

    你可能感兴趣的文章
    python在gpu上运行_【python】python开启GPU加速
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在Conda环境中,但在Windows虚拟环境中没有激活
    查看>>
    python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
    查看>>
    python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
    查看>>
    Python图像处理:从内存加载jpeg
    查看>>
    python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
    查看>>
    python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
    查看>>
    python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
    查看>>
    python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
    查看>>
    Python哪个版本最稳定好用2023.10.19
    查看>>
    Python和黑客技术的渊源
    查看>>
    Python和RF编写接口自动化
    查看>>
    Python和RF编写web自动化
    查看>>
    python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
    查看>>
    python和java哪个更值得学——来自知乎高赞回答
    查看>>
    python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
    查看>>
    python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
    查看>>
    Python命名中尾随下划线有什么好处?
    查看>>