1102 Invert a Binary Tree (25 分)

1102 Invert a Binary Tree (25 分)

The following is from Max Howell @twitter:

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.
Now it’s your turn to prove that YOU CAN invert a binary tree!

Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (≤10) which is the total number of nodes in the tree – and hence the nodes are numbered from 0 to N−1. Then N lines follow, each corresponds to a node from 0 to N−1, and gives the indices of the left and right children of the node. If the child does not exist, a - will be put at the position. Any pair of children are separated by a space.

Output Specification:
For each test case, print in the first line the level-order, and then in the second line the in-order traversal sequences of the inverted tree. There must be exactly one space between any adjacent numbers, and no extra space at the end of the line.

Sample Input:

8
1 -
- -
0 -
2 7
- -
- -
5 -
4 6

Sample Output:

3 7 2 6 4 0 5 1
6 5 7 4 3 2 0 1

作者
CHEN, Yue
单位
浙江大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

//1102 Invert a Binary Tree (25 分)

#include<bits/stdc++.h>
using namespace std;
int n;
const int    MAX_N=22;
vector<int>tree[MAX_N];
bool havaFa[MAX_N];
void level(int root){
    vector<int>levelArr;
    queue<int>q;
    q.push(root);
    while(!q.empty()){
       int fr= q.front();
        q.pop();
        levelArr.emplace_back(fr);
        
        if(tree[fr].size()){
        	for(int i=tree[fr].size()-1;i>=0;i--){
        		int val=tree[fr][i];
        		if(val!=-1){
        				q.push(val);
				}
        	
			}
//            for(auto val: tree[fr]){
//                q.push(val);
//            }
        }
    }
    int fir=1;
    for(auto val:levelArr){
        if(fir)fir=0;
        else printf(" ");
        printf("%d",val);
    }
    putchar('\n');
}
int inFir=1;
void in(int node){
	if(node==-1)return;
//     if(tree[node].size()>=2)
	 in(tree[node][1]);
    if(inFir)inFir=0;
    else printf(" ");
    printf("%d",node);
   
//      if(tree[node].size()>=1)
	  in(tree[node][0]);
}
int main(){
    scanf("%d", &n);
    getchar();
//    printf("n: %d\n",n);
    for(int i=0;i<n;i++){
       char u,v;
        scanf("%c %c",&u,&v);
         getchar();
        if(u!='-'){
              tree[i].emplace_back(u-'0');
            havaFa[u-'0']=1;
        }else{
//             之前没有 写push -1, 样例2 错了
//             原因是 不写的话, 会把 - 1 和 1 - 当作同一种东西
        	 tree[i].emplace_back(-1);
		}
         if(v!='-'){
              tree[i].emplace_back(v-'0');
               havaFa[v-'0']=1;
        }else{
        	 tree[i].emplace_back(-1);
		}
      
    }
    int root=0;
    for(int nodeNum=0;nodeNum<n;nodeNum++){
        if(!havaFa[nodeNum]){
            root=nodeNum;
            break;
        }
    }
    
    level(root);
    in(root);
    
    
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值