
7-4 是否同一棵二叉搜索树 (25分) C++
问题理解:给定两个插入序列,分别生成二叉搜索树,判断两棵树是否相同。 树的构建:使用递归函数依次将元素插入到树中。 树的比较:递归比较两个树的节点值及左右子树的结构是否一致。 输入处理:读取输入数据,处理每个测试用例,构建初始树和检查树。 潜在问题:确保节点正确插入到左或右子树,避免编译错误,正确处理空树。 代码修正:修正 输入处理优化:确保每个检查序列正确读取并构建树。 逻辑验证:验证树构建和比较函数的正确性,确保没有遗漏或错误。 读取输入:处理每个测试用例,读取初始序列和检查序列。 构建树:递归函数依次插入元素到二叉搜索树中。 比较树:递归函数检查两个树的节点值及左右子树结构是否一致。 输出结果:根据比较结果输出"Yes"或"No"。
发布日期:2021-05-08 02:33:19
浏览次数:23
分类:精选文章
本文共 2026 字,大约阅读时间需要 6 分钟。
题目要求我们判断两个不同的插入序列是否能生成相同的二叉搜索树。解决方案是分别构建每个序列对应的二叉搜索树,并比较它们是否结构相同。
分析过程
优化步骤
new
操作符的使用,确保对象正确创建。最终解决方案
代码修正
修正new
操作符,确保正确创建节点对象。
#includeusing 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;}
解决方案总结
该解决方案通过分别构建两个序列对应的二叉搜索树,并比较它们的结构,来判断是否生成了相同的树。通过递归函数进行树的构建和比较,确保了逻辑的正确性和代码的高效性。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月06日 13时26分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
三层框架+sql server数据库 实战教学-徐新帅-专题视频课程
2019-03-05
【单片机开发】智能小车工程(经验总结)
2019-03-05
【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
2019-03-05
C++&&STL
2019-03-05
子集(LeetCode 78)
2019-03-05
微信js-sdk使用简述(分享,扫码功能等)
2019-03-05
mxsrvs支持thinkphp3.2伪静态
2019-03-05
c++中ifstream及ofstream超详细说明
2019-03-05
vuex modules
2019-03-05
sleep、wait、yield、join——简介
2019-03-05
web项目配置
2019-03-05
基于单片机简易信号误差分析设计-全套资料
2019-03-05
基于单片机简易脉搏测量仪系统设计-毕设课设资料
2019-03-05
Javascript中String支持使用正则表达式的四种方法
2019-03-05
eclipse引用sun.misc开头的类
2019-03-05
Servlet2.5的增删改查功能分析与实现------删除功能(四)
2019-03-05
spring启动错误:Could not resolve placeholder
2019-03-05
查询某表格上次进行vacuum的时间
2019-03-05
invalid byte sequence for encoding
2019-03-05
redis向数组中添加值并查看数组长度
2019-03-05