3348. 樹的雙親儲存法+多叉樹的遍歷
阿新 • • 發佈:2020-10-07
3348. 樹的雙親儲存法
ECNU-3348
/** * 這裡不能用鄰接矩陣的形式儲存整個圖,因為可能會出現重邊的問題。 * 如果是簡單的重邊,取最短邊即可,但是本題需要求出所有的最短路徑,所以更長的邊 * 對結果會有影響 */ #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<string> #include<cmath> #include<map> #include<vector> #include<unordered_map> #include<bitset> using namespace std; const int maxn=100005; int n; int root; vector<int>child[maxn];//儲存所有的孩子結點 vector<int>order; void postOrder(int cur){ for(auto i:child[cur]){ postOrder(i); } order.push_back(cur); } int main(){ cin>>n; for(int i=0;i<n;i++){ int parent; cin>>parent; if(parent==-1){ //i為根節點 root=i; }else child[parent].push_back(i); } postOrder(0); int size=order.size(); for(int i=0;i<size-1;i++){ cout<<order[i]<<" "; } cout<<order[size-1]<<endl; return 0; }