PAT(A) - 1102. Invert a Binary Tree (25)
来源:互联网 发布:什么软件可以看回看 编辑:程序博客网 时间:2024/06/05 04:09
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:81 -- -0 -2 7- -- -5 -4 6Sample Output:
3 7 2 6 4 0 5 16 5 7 4 3 2 0 1
思路分析:输入结点建立一棵二叉树,关键先找到根节点,然后进行遍历。输出第一行是层序遍历,第二行是中序遍历。然而。。。输出结果怎么和样例不太一样呢。原来还有一个单词是'Invert",意思是翻转。不用真正的做翻转,只要遍历的时候调整一下顺序就OK了。
#include <cstdio>#include <queue>#define MAX 10using namespace std;typedef struct { int index; int lchild; int rchild;} Node;Node node[MAX];int count = 0;void dfsInOrder( Node curNode ) { if( curNode.rchild != -1 ) { dfsInOrder( node[curNode.rchild] ); } if( count == 0 ) { printf( "%d", curNode.index ); count = 1; } else { printf( " %d", curNode.index ); } if( curNode.lchild != -1 ) { dfsInOrder( node[curNode.lchild] ); }}int main() { //freopen( "123.txt", "r", stdin ); int isRoot[MAX] = { 0 }; int n; scanf( "%d", &n ); char ch = getchar(); for( int i = 0; i < n; i++ ) { node[i].index = i; char left, right; scanf( "%c %c", &left, &right ); char ch = getchar(); if( left == '-' ) node[i].lchild = -1; else { node[i].lchild = left - '0'; isRoot[left - '0'] = 1; } if( right == '-' ) node[i].rchild = -1; else { node[i].rchild = right - '0'; isRoot[right - '0'] = 1; } } //for( int i = 0; i < n; i++ ) { // printf( "%d %d %d\n", node[i].index, node[i].lchild, node[i].rchild ); //} int root = 0; for( int i = 0; i < n; i++ ) { if( isRoot[i] == 0 ) { root = i; break; } } //printf( "root: %d\n", root ); queue<Node> q; q.push( node[root] ); while( !q.empty() ) { Node curNode = q.front(); q.pop(); if( count == 0 ) { printf( "%d", curNode.index ); count = 1; } else printf( " %d", curNode.index ); if( curNode.rchild != -1 ) q.push( node[curNode.rchild] ); if( curNode.lchild != -1 ) q.push( node[curNode.lchild] ); } printf( "\n" ); count = 0; dfsInOrder( node[root] ); return 0;}
- [PAT]1102. Invert a Binary Tree (25)
- 【PAT】1102. Invert a Binary Tree (25)
- PAT 1102. Invert a Binary Tree (25)
- PAT 1102. Invert a Binary Tree (25)
- pat 1102. Invert a Binary Tree (25)
- PAT 1102. Invert a Binary Tree (25)
- 【PAT】1102. Invert a Binary Tree (25)
- PAT 1102. Invert a Binary Tree (25)
- PAT 1102. Invert a Binary Tree (25)
- PAT(A) - 1102. Invert a Binary Tree (25)
- PAT(A)-1102. Invert a Binary Tree (25)(数据结构+bfs)
- PAT A 1102. Invert a Binary Tree (25)
- Pat(A) 1102. Invert a Binary Tree (25)
- PAT--1102. Invert a Binary Tree
- 【PAT】1102. Invert a Binary Tree
- PAT A1102. Invert a Binary Tree (25)
- 1102. Invert a Binary Tree (25)-PAT甲级真题
- 1102. Invert a Binary Tree (25) PAT甲级
- html表单元素
- HTTP状态码
- 安装Android虚拟机,CPU/ABI 为空的解决办法
- GitHub入门
- FastJson源码解读
- PAT(A) - 1102. Invert a Binary Tree (25)
- 【Leetcode】315. Count of Smaller Numbers After Self
- 什么是ANR 如何避免
- Android 线程 thread 两种实现方法!
- VFS文件系统结构分析(容易理解)
- SIP协议小介
- Storm 1:介绍Storm的基本概念
- 被改错的密码
- 使用ffmpeg的concat可以实现简单的流文件合并功能。