二叉树有N个结点,给出每个结点的左右孩子结点的编号,把二叉树反转(左右孩子交换  所以是后序遍历交换) 输出反转后二叉树的层序遍历和中序遍历

#include<bits/stdc++.h>

using namespace std;
const int N=;
struct node
{
int L,R;
}s[N];
int toint(char ch)
{
if(ch=='-'){
return -;
}
else{
return ch-'';
} }
int isroot[N];
void postorder(int root)
{
if(root==-){
return;
}
postorder(s[root].L);
postorder(s[root].R);
swap(s[root].L,s[root].R);
}
vector<int>in;
void print(int root)
{
if(root!=-){
print(s[root].L);
in.push_back(root);
print(s[root].R);
}
}
vector<int>le;
void lever(int root)
{
queue<int>Q;
Q.push(root);
while(!Q.empty()){
int u=Q.front();
Q.pop();
le.push_back(u);
if(s[u].L!=-) Q.push(s[u].L);
if(s[u].R!=-) Q.push(s[u].R); }
}
int main()
{
fill(isroot,isroot+N,false);
int n;
scanf("%d",&n);
for(int i=;i<n;i++){
char ch1,ch2;
scanf("%*c%c %c",&ch1,&ch2);
int a=toint(ch1);
int b=toint(ch2);
s[i].L=a;
s[i].R=b;
isroot[a]=true;
isroot[b]=true;
}
int root=;
for(int i=;i<n;i++){
if(isroot[i]==false){
root=i;
}
}
postorder(root);
print(root);
lever(root);
for(int i=;i<le.size();i++){
if(i) printf(" ");
printf("%d",le[i]);
}
printf("\n");
for(int i=;i<in.size();i++){
if(i) printf(" ");
printf("%d",in[i]);
}
printf("\n");
return ;
}

最新文章

  1. Atitit.数据检索与网络爬虫与数据采集的原理概论
  2. 多媒体(3):基于WindowsAPI的视频捕捉卡操作
  3. 思考探索,如何才能高效访问我的这个DataTable?
  4. java中的类实现comparable接口 用于排序
  5. ssl https双向验证的配置与证书库的生成
  6. richedit设置滚动条的位置和更新内容
  7. 2.12. 后端 SQL 的可见性(Core Data 应用程序实践指南)
  8. Node.js之包与npm包管理工具
  9. Button标签自动刷新问题
  10. ASP.NET 设计模式:设计模式和原则简述
  11. CTF---Web入门第十二题 程序逻辑问题
  12. Java二叉树实现及递归与非递归遍历实现
  13. SQL 基础学习(1):下载DB Browser for SQLite. 下载graphviz(为了使用Rails ERD的前提)出现❌,已debug.
  14. log4j日志日记记录使用教程
  15. ThreadLocal的练习代码
  16. 【MVC】View的使用
  17. js中var与let
  18. 报表导出jxls的使用笔记
  19. 深入理解JVM一垃圾回收算法
  20. 为什么我们选择parquet

热门文章

  1. PHPmailer群发Gmail的常见问题
  2. C++STL之map映照容器
  3. removing vmware debugger from visual studio
  4. linq 和lambda查询
  5. Mac安装protobuf 流程
  6. matlab 大块注释和取消注释的快捷键
  7. git优点缺点(简单介绍)
  8. C#语言概述
  9. iOS 蓝牙(GameKit CoreBluetooth)
  10. Easyui下的点击回车键跳转到下个控件