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;
}
相关推荐
jdksjw1 小时前
同步与异步、阻塞与非阻塞、多线程、协程超详细讲解(Python并发编程从入门到精通)
开发语言·python
Zach_菠萝侠1 小时前
【DeepSeek Harness 研究】进化方向4:安全加固 思考、设计与实现
开发语言·安全·deepseek
ShineWinsu2 小时前
对于C++:布隆过滤器(bloomfilter)的详细解析
c++·面试·位图·位运算·布隆过滤器·海量数据·比特位
SL-staff2 小时前
技术实践:HR如何用JVS-Logic可视化编排实现考勤数据同步(含节点配置与异常处理)
开发语言·python·低代码·钉钉·可视化编排·jvs-logic·hr技术
SomeB1oody2 小时前
【RustyML入门】6.0. 数学工具
开发语言·后端·机器学习·rust·教程
进制树3 小时前
【飞控开发实战·⑲】ROS2无人机开发环境搭建:Jazzy安装、工作空间与hello_drone节点实战
开发语言·安全·无人机·课程设计
牛马也想出海3 小时前
亚马逊爬虫代理IP:IP类型选择与配置指南
开发语言·php
菜冻鱼4 小时前
Python-pytorch-高级技巧
开发语言·人工智能·pytorch·python·深度学习·神经网络·聚类
lpfasd1234 小时前
python webview打包版卡死、开发版正常
开发语言·python
weixin_461408584 小时前
npm npx yarn
开发语言·前端·javascript