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;
}
相关推荐
严谨的麻辣烫20 分钟前
Python HTTP 连接池怎么用?从连接复用到请求异常排查
开发语言·python·http·requests·网络排查
码林鼠25 分钟前
flutter状态管理入门教程-Riverpod
开发语言·javascript·flutter
fpcc32 分钟前
计算机原理—如何高效的操作文件
c++·计算机原理
Rabitebla1 小时前
【系统性学习笔记】Linux 权限篇(二):文件属性、权限修改与目录权限的底层逻辑
linux·c++·笔记·学习·算法
system_error_x1 小时前
C++ 编程基础入门教程
开发语言·c++
Amos_Web1 小时前
Markdonw语法
开发语言·前端·javascript
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 回顾和今日内容介绍
java·开发语言·交友
初心未改HD2 小时前
DSH Skill开发实战:SKILL.md是给LLM看的操作手册,不是给人看的README,踩了4个坑
java·大数据·开发语言
Wang's Blog2 小时前
Java 项目实战: 交友项目 - SpringData-Mongo 环境搭建和 CRUD
java·开发语言·交友
凯瑟琳.奥古斯特3 小时前
动态调优IoU提升OCR文本合并精度
开发语言·python·算法