一個二叉樹,如果每一個層的結點數都達到最大值,則這個二叉樹就是完美二叉樹。對於深度為 D 的,有 N 個結點的二叉樹,若其結點對應於相同深度完美二叉樹的層序遍歷的前 N 個結點,這樣的樹就是完全二叉樹。
給定一棵完全二叉樹的后序遍歷,請你給出這棵樹的層序遍歷結果。
輸入格式:
輸入在第一行中給出正整數 N(≤),即樹中結點個數。第二行給出后序遍歷序列,為 N 個不超過 100 的正整數。同一行中所有數字都以空格分隔。
輸出格式:
在一行中輸出該樹的層序遍歷序列。所有數字都以 1 個空格分隔,行首尾不得有多余空格。
輸入樣例:
8 91 71 2 34 10 15 55 18
輸出樣例:
18 34 55 71 2 10 15 91
思想:就是dfs,直接走到最底下的最后一個結點,然后構造一個一棵樹(用數組表示的),我這里用的是nums數組,然后一個for輸出!就完事了
#include<bits/stdc++.h> using namespace std; int k ; int n ; int nums[100]; void F(int p , int a[]) { if(p > n) return ; F(p<<1 , a); F(p<<1|1 , a); nums[p] = a[k++]; } int main() { cin>>n; int pos[36]; k = 1 ; for(int i = 1 ; i <= n ; i++) cin>>pos[i]; F(1,pos); for(int i = 1 ; i <= n ;i++){ if(i==1) cout<<nums[i]; else cout<<" "<<nums[i]; } return 0; }