1102. Invert a Binary Tree (25)
来源:互联网 发布:厦门巨龙软件 编辑:程序博客网 时间:2024/05/16 04:12
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
<pre name="code" class="cpp">#include <iostream>#include<stdio.h>#include<algorithm>#include <vector>#include <queue>using namespace std;struct Node{ int no;//编号 Node *leftChild; Node *rightChild; Node *parent; Node(int f,Node *a,Node *b,Node *c) { no = f; leftChild=a; rightChild=b; parent =c; }};void showTree(Node*,vector<int>*);void InvertTree(Node *);void InOrderTraversal(Node *,vector<int>*);int main(){ int n,i; scanf("%d",&n); char leftnum,rigthnum; vector<Node *>allNode; for(i=0; i<n; i++) { Node *p = new Node(i,NULL,NULL,NULL); allNode.push_back(p); } for(i=0; i<n; i++) { scanf("%*c%c %c",&leftnum,&rigthnum); if(leftnum!='-') { allNode[i]->leftChild = allNode[leftnum-'0']; allNode[leftnum-'0']->parent = allNode[i]; } if(rigthnum!='-') { allNode[i]->rightChild = allNode[rigthnum-'0']; allNode[rigthnum-'0']->parent = allNode[i]; } } int rootNum = -1; for( i=0; i<n; ++i) { if(allNode[i]->parent==NULL) { rootNum = allNode[i]->no; break; } } vector<int>NodeIndex; showTree(allNode[rootNum],&NodeIndex); for(i=0; i<NodeIndex.size(); ++i) { printf("%d",NodeIndex[i]); printf(i==NodeIndex.size()-1?"\n":" "); } InvertTree(allNode[rootNum]); vector<int>Inorder; InOrderTraversal(allNode[rootNum],&Inorder); for(i=0; i<Inorder.size(); ++i) { printf("%d",Inorder[i]); printf(i==Inorder.size()-1?"\n":" "); } return 0;}void showTree(Node *curNode,vector<int>*IndexArray){ Node *t; queue<Node *>q; if(curNode!=NULL) q.push(curNode); while(!q.empty()){ t = q.front(); q.pop(); IndexArray->push_back(t->no); if(t->rightChild) q.push(t->rightChild); if(t->leftChild) q.push(t->leftChild); }}void InvertTree(Node *curNode){ if(curNode!=NULL) { swap(curNode->leftChild,curNode->rightChild); InvertTree(curNode->rightChild); InvertTree(curNode->leftChild); }}void InOrderTraversal(Node *curNode,vector<int>* array){ if(curNode->leftChild!=NULL) InOrderTraversal(curNode->leftChild,array); array->push_back(curNode->no); if(curNode->rightChild!=NULL) InOrderTraversal(curNode->rightChild,array);}
- 1102. Invert a Binary Tree (25)
- 1102. Invert a Binary Tree (25)
- [PAT]1102. Invert a Binary Tree (25)
- 【PAT】1102. Invert a Binary Tree (25)
- 1102. Invert a Binary Tree (25)
- PAT 1102. Invert a Binary Tree (25)
- 1102. Invert a Binary Tree (25)
- 1102. Invert a Binary Tree (25)
- 1102. Invert a Binary Tree (25)
- PAT 1102. Invert a Binary Tree (25)
- 1102. Invert a Binary Tree (25)
- 1102. Invert a Binary Tree (25)
- pat 1102. Invert a Binary Tree (25)
- 1102. Invert a Binary Tree (25)
- PAT_A 1102. Invert a Binary Tree (25)
- 1102. Invert a Binary Tree (25)
- 1102. Invert a Binary Tree (25)
- 1102. Invert a Binary Tree (25)
- android用eclipse 开发出现CreateActivty select actvity type 下一片空白
- BACnet协议简要说明及组网简介
- Android 获取验证码后 在Button控件上 显示倒计时
- android Notification与remoteView
- 形式参数和返回值的问题深入研究
- 1102. Invert a Binary Tree (25)
- 修饰符的概述和总结
- unity shader 固定管线实例(一) 基础光照效果纯颜色
- python 批量关注好友
- 绘图的五种方式
- 51NOD1125交换机器的最小代价(贪心算法)
- Python 基础——random模块
- AtomicInteger介绍
- GNU C库「glibc」getaddrinfo 发现重大漏洞