L2-011 玩转二叉树
L2-011 玩转二叉树 (25 分)
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。
输出格式:
在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
输入样例:
7
1 2 3 4 5 6 7
4 1 3 2 6 5 7
输出样例:
4 6 1 7 5 3 2
#include<bits/stdc++.h> using namespace std; struct NODE{ int data; NODE* left; NODE* right; }node,*pnode; queue<NODE*> q; NODE* newnode(int data){ NODE* nnode=(NODE*)malloc(sizeof(NODE)); nnode->data=data; nnode->left=NULL; nnode->right=NULL; return nnode; } NODE* build(int* prev,int* in,int n){ NODE* root; if(n==0) return NULL; else if(n==1){ return newnode(*prev); } else{ int i; root=newnode(*prev); for(i=0;i<n;i++){ if(*(in+i)==root->data) break; } root->left=build(prev+1,in,i); root->right=build(prev+1+i,in+i+1,n-i-1); } return root; } int main(){ int n,prevnode[50],innode[50]; NODE* p; cin >> n; for(int i=0;i<n;i++){ cin >> innode[i]; } for(int i=0;i<n;i++){ cin >> prevnode[i]; } int* prevf=prevnode; int* inf=innode; pnode=build(prevf,inf,n); cout << pnode->data; q.push(pnode); while(!q.empty()){ p=q.front(); q.pop(); if(p->right){ cout << " " << p->right->data; q.push(p->right); } if(p->left){ cout << " " << p->left->data; q.push(p->left); } } return 0; }
本文作者:xhy666
本文链接:https://www.cnblogs.com/xhy666/p/16001488.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· Apache Tomcat RCE漏洞复现(CVE-2025-24813)