先用中序确定节点的值,再用层次遍历输出即可。
写的时候思维江化,一开始用指针建树。。。
#include <bits/stdc++.h> using namespace std; #define maxn 105 struct Node { int index,left,right; }node[maxn]; int n,a[maxn],tree[maxn]; vector<int> ve[maxn],in,post; void inorder(int p) { if(node[p].left!=-1) inorder(node[p].left); in.push_back(node[p].index); if(node[p].right!=-1) inorder(node[p].right); } void bfs() { cout<<tree[0]; queue<int> q; q.push(0); while(!q.empty()) { int t=q.front(); q.pop(); if(t>0) cout<<" "<<tree[t]; if(node[t].left!=-1) q.push(node[t].left); if(node[t].right!=-1) q.push(node[t].right); } cout<<endl; } int main() { int l,r; cin>>n; for(int i=0;i<n;i++) { cin>>l>>r; node[i].index=i; node[i].left=l; node[i].right=r; } for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); inorder(0); for(int i=0;i<n;i++) tree[in[i]]=a[i]; bfs(); return 0; }
原文地址:https://www.cnblogs.com/FTA-Macro/p/11443516.html
时间: 2024-09-27 02:26:37