Description
给出一棵二叉树,求它的层次遍历结果。
[二叉树的遍历问题是一种精神,务必领会]
Input Format
第一行,N<1000000,表示二叉树节点数。
默认序号为0的节点为树根。接下来共N-1行,依次表示序号为1,...,N-1的节点的父亲节点序号。
如果一个节点有两个孩子节点,左孩子节点序号总是小于右孩子节点序号。
Output Format
仅一行,二叉树的层次遍历结果。节点序号间用空格隔开。
Hint
Sample Input
6
0
1
1
0
4
Sample Output
0 1 4 2 3 5
#include <iostream> #include <queue> using namespace std; int main() { int n; cin>>n; int tree[2*n]={0}; for(int i=1;i<n;i++){ int t=0; cin>>t; if(tree[2*t]==0)tree[2*t]=i; else tree[2*t+1]=i; } queue<int> q; q.push(0); while(!q.empty()){ int now=q.front(); q.pop(); cout<<now<<' '; if(tree[2*now])q.push(tree[2*now]); if(tree[2*now+1])q.push(tree[2*now+1]); } return 0; }