用c语言
帮我注释详细一点 谢谢 看图 asdfghjzkahdkxbsldbxlsvsoxbd
1条回答 默认 最新
- 快乐鹦鹉 2022-10-13 08:23关注
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string.h> #include <queue> using namespace std; const int maxn = 30; char postOrder[maxn] = { 0 }; char inOrder[maxn] = { 0 }; struct node { int data; node* lchild; node* rchild; }; // 根据后序序列和中序序列还原一棵二叉树 node* create(int postL, int postR, int inL, int inR) { if (postL > postR) return nullptr; node* root = new node; root->data = postOrder[postR]; int k; for (k = inL; k <= inR; ++k) { if (inOrder[k] == postOrder[postR]) { break; // 在中序区间中找到了根节点的位置 } } int numLeft = k - inL; // 偏移量 // 注意此处对左子树区间和右子树区间的划分,根据关键的偏移量来划分的结果 root->lchild = create(postL, postL + numLeft - 1, inL, k - 1); root->rchild = create(postL + numLeft, postR - 1, k + 1, inR); return root; } // 层序遍历 void LayerOrder(node* root) { queue<node*> q; q.push(root); bool isFirstNode = true; while (!q.empty()) { node* top = q.front(); q.pop(); if (isFirstNode) { printf("%c", top->data); isFirstNode = false; } else { printf("%c", top->data); } if (top->lchild != nullptr) q.push(top->lchild); if (top->rchild != nullptr) q.push(top->rchild); } } int main() { scanf("%s", inOrder); scanf("%s", postOrder); LayerOrder(create(0, strlen(inOrder) - 1, 0, strlen(inOrder) - 1)); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 运动想象脑电信号数据集.vhdr
- ¥15 三因素重复测量数据R语句编写,不存在交互作用
- ¥15 微信会员卡等级和折扣规则
- ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
- ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
- ¥15 gdf格式的脑电数据如何处理matlab
- ¥20 重新写的代码替换了之后运行hbuliderx就这样了
- ¥100 监控抖音用户作品更新可以微信公众号提醒
- ¥15 UE5 如何可以不渲染HDRIBackdrop背景
- ¥70 2048小游戏毕设项目