C++:Invert a Binary Tree

现在轮到你证明你可以翻转一棵二叉树了!

输入格式:

每个输入文件包含一个测试用例。 第一行给出正整数 NN(≤10≤10),表示二叉树的节点总数,节点编号从 0 到 N−1N−1。 接下来 NN 行,每行对应编号从 0 到 N−1N−1 的一个节点,给出该节点的左、右子节点编号。如果子节点不存在,则用 - 表示。左右子节点编号之间用一个空格分隔。

输出格式:

对于每个测试用例,第一行输出翻转后的二叉树的层序遍历序列;第二行输出该树的中序遍历序列。相邻数字之间用一个空格分隔,行末不得有多余空格。

样例输入:

复制代码
8
1 -
- -
0 -
2 7
- -
- -
5 -
4 6

样例输出:

复制代码
3 7 2 6 4 0 5 1
6 5 7 4 3 2 0 1
cpp 复制代码
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

struct node{
    node* l;node* r;
    int val;
};

node* create(int v){
    node *f=new node;
    f->val=v;
    f->l=NULL;
    f->r=NULL;
    return f;
}

void pri1(node* t){
    vector<int> ans;
    queue<node*> q;
    q.push(t);
    while(!q.empty()){
        node* cur = q.front();
        q.pop();
        ans.push_back(cur->val);
        if(cur->r) q.push(cur->r);
        if(cur->l) q.push(cur->l);
    }
    for(int i=0;i<ans.size();++i){
        if(i>0)cout<<" ";
        cout<<ans[i];
    }
    cout<<endl;
}
vector<int> vec;
void pri2(node* t) {
    if (!t) return;
    pri2(t->r);
    vec.push_back(t->val);
    pri2(t->l);
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
	cout.tie(0);
    int n;cin>>n;
     node* t[10];
     for(int i=0;i<n;++i)t[i]=create(i);

     bool is_child[10]={0};
     
     for(int i=0;i<n;++i){
        char a,b;cin>>a>>b;
        int x,y;
        if(b!='-'){
            y=b-'0';
            t[i]->r=t[y];
            is_child[y] = 1; 
        }
        if(a!='-'){
            x=a-'0';
            t[i]->l=t[x];
            is_child[x] = 1;
        }
    }
    
    int root = 0;
    while (is_child[root])root++;
    pri1(t[root]);
    vec.clear();
    pri2(t[root]);
    for(int i=0;i<vec.size();i++){
        if(i>0) cout<<" ";
        cout<<vec[i];
    }
    cout<<endl;

    return 0;
}
相关推荐
菜鸟~noob2336 分钟前
【电子战】第03篇:CFAR(恒虚警)处理【含matlab代码】
开发语言·matlab
泡海椒1 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb1 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
Keven_112 小时前
算法札记:ACM适用的很骚的C++语法(持续更新)
开发语言·c++
mengzhi啊2 小时前
QPluginLoader 动态 DLL 插件版,支持插件之间通信,广播。请求和应答
c++·qt
脉动数据行情13 小时前
C# 实现德指 DAX 期货 WebSocket 实时行情监听
开发语言·websocket·c#
大圣编蚕3 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法
菜鸟~noob2333 小时前
【电子战】第02篇:能量检测器 vs. 相关检测器【含matlab代码】
开发语言·matlab
OpenAnolis小助手4 小时前
一句话看透 JVM,SysOM 诊断 Skill 新增 Java 应用诊断能力
java·开发语言·jvm·阿里云·操作系统控制台·sysom
小玮看世界4 小时前
[Python]OD算法在OD实际运用转化参考清单
开发语言·python·算法