【专题复习1:树的遍历】1004、1020
1004
#include <bits/stdc++.h>
using namespace std;
vector<int> G[101];
int leaf[101];
int maxh;
void DFS(int root,int h)
{
maxh=max(maxh,h);
if(G[root].size()==0){
leaf[h]++;
return;
}
for(int i=0;i<G[root].size();i++)
DFS(G[root][i],h+1);
}
int main()
{
int n,m,id,k,child;
cin>>n>>m;
for(int i=0;i<m;i++){
cin>>id>>k;
for(int j=0;j<k;j++){
cin>>child;
G[id].push_back(child);
}
}
DFS(1,1);
for(int i=1;i<=maxh;i++){
if(i!=1) cout<<" ";
cout<<leaf[i];
}
return 0;
}
1020
#include <bits/stdc++.h>
using namespace std;
struct node
{
int data;
node* lc;
node* rc;
};
vector<int> post,in;
int n,num=0;
node* create(int pl,int pr,int il,int ir)
{
if(pl>pr) return nullptr;
node* r=new node;
r->data=post[pr];
int i=0;
while(in[i]!=post[pr]) i++;
r->lc=create(pl,pl+i-il-1,il,i-1);
r->rc=create(pl+i-il,pr-1,i+1,ir);
return r;
}
void bfs(node* root)
{
queue<node*> q;
q.push(root);
while(!q.empty()){
node* now=q.front();
q.pop();
cout<<now->data;
num++;
if(num<n) cout<<" ";
if(now->lc!=nullptr)
q.push(now->lc);
if(now->rc!=nullptr)
q.push(now->rc);
}
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif
cin>>n;
post.resize(n);in.resize(n);
for(int i=0;i<n;i++)
cin>>post[i];
for(int i=0;i<n;i++)
cin>>in[i];
node* root=create(0,n-1,0,n-1);
bfs(root);
return 0;
}
不理解为何这种写法编译没错却提示段错误
#include <bits/stdc++.h>
using namespace std;
struct node
{
int data;
node* lc;
node* rc;
};
vector<int> post,in;
node* root;
int n,num=0;
void create(int pl,int pr,int il,int ir,node* &root)
{
if(pl>pr) return ;
root->data=post[pr];
int i=0;
while(in[i]!=post[pr]) i++;
create(pl,pl+i-il-1,il,i-1,root->lc);
create(pl+i-il,pr-1,i+1,ir,root->rc);
}
void bfs()
{
queue<node*> q;
q.push(root);
while(!q.empty()){
node* now=q.front();
q.pop();
cout<<now->data;
num++;
if(num<n) cout<<" ";
if(now->lc!=nullptr)
q.push(now->lc);
if(now->rc!=nullptr)
q.push(now->rc);
}
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif
cin>>n;
post.resize(n);in.resize(n);
for(int i=0;i<n;i++)
cin>>post[i];
for(int i=0;i<n;i++)
cin>>in[i];
create(0,n-1,0,n-1,root);
bfs();
return 0;
}
本文来自博客园,作者:勇往直前的力量,转载请注明原文链接:https://www.cnblogs.com/moonlight1999/p/15933777.html

浙公网安备 33010602011771号