7-4 是否同一棵二叉搜索树 (25分) C++
发布日期:2021-05-08 02:33:19 浏览次数:23 分类:精选文章

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

题目要求我们判断两个不同的插入序列是否能生成相同的二叉搜索树。解决方案是分别构建每个序列对应的二叉搜索树,并比较它们是否结构相同。

分析过程

  • 问题理解:给定两个插入序列,分别生成二叉搜索树,判断两棵树是否相同。
  • 树的构建:使用递归函数依次将元素插入到树中。
  • 树的比较:递归比较两个树的节点值及左右子树的结构是否一致。
  • 输入处理:读取输入数据,处理每个测试用例,构建初始树和检查树。
  • 潜在问题:确保节点正确插入到左或右子树,避免编译错误,正确处理空树。
  • 优化步骤

  • 代码修正:修正new操作符的使用,确保对象正确创建。
  • 输入处理优化:确保每个检查序列正确读取并构建树。
  • 逻辑验证:验证树构建和比较函数的正确性,确保没有遗漏或错误。
  • 最终解决方案

  • 读取输入:处理每个测试用例,读取初始序列和检查序列。
  • 构建树:递归函数依次插入元素到二叉搜索树中。
  • 比较树:递归函数检查两个树的节点值及左右子树结构是否一致。
  • 输出结果:根据比较结果输出"Yes"或"No"。
  • 代码修正

    修正new操作符,确保正确创建节点对象。

    #include 
    using namespace std;
    struct node {
    int val;
    node* left;
    node* right;
    node(int x) : val(x), left(nullptr), right(nullptr) {}
    };
    node* build(node* tnode, int tval) {
    if (tnode == nullptr) {
    return new node(tval);
    }
    if (tval < tnode->val) {
    tnode->left = build(tnode->left, tval);
    } else {
    tnode->right = build(tnode->right, tval);
    }
    return tnode;
    }
    bool SameTree(node* root, node* croot) {
    if (root == nullptr && croot == nullptr) return true;
    if (root == nullptr || croot == nullptr) return false;
    if (root->val == croot->val) {
    return SameTree(root->left, croot->left) &&
    SameTree(root->right, croot->right);
    } else {
    return false;
    }
    }
    int main() {
    int n, l;
    while (true) {
    cin >> n;
    if (n == 0) break;
    cin >> l;
    vector
    init_seq(n);
    for (int i = 0; i < n; ++i) {
    cin >> init_seq[i];
    }
    node* root = nullptr;
    for (int x : init_seq) {
    root = build(root, x);
    }
    while (l--) {
    node* croot = nullptr;
    for (int x : init_seq) {
    croot = build(croot, x);
    }
    if (SameTree(root, croot)) {
    cout << "Yes";
    } else {
    cout << "No";
    }
    // 为了处理多个测试用例,清理root
    root = nullptr;
    }
    }
    return 0;
    }

    解决方案总结

    该解决方案通过分别构建两个序列对应的二叉搜索树,并比较它们的结构,来判断是否生成了相同的树。通过递归函数进行树的构建和比较,确保了逻辑的正确性和代码的高效性。

    上一篇:面试游戏开发被问到的Unity本地坐标和世界坐标详解
    下一篇:Unity Shader之路(五前置知识点)Unity提供的Cg/HLSL语义?

    发表评论

    最新留言

    路过按个爪印,很不错,赞一个!
    [***.219.124.196]2025年04月06日 13时26分53秒