**2183 - 求二叉树的深度及遍历结果
**来源: 东方博宜oj oj.czos.cn
*解法一:用数组存储二叉树,再遍历求解
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int a[N];
int n;
/*
用数组读入二叉树
i号节点的左孩子一定是:2*i
i号节点的右孩子一定是:2*i+1
*/
void dfs(int x)
{
if(x*2<=n&&a[x*2]) dfs(x*2);
if(x*2+1<=n&&a[x*2+1]) dfs(x*2+1);
cout<< a[x]<< " ";
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
// int(log2(n))+1
cout<< (int)log2(n)+1<<endl; // 二叉树的深度
dfs(1);
return 0;
}
*解法二:读入的同时建树
#include<bits/stdc++.h>
using namespace std;
int n,x;
int a[110][4]; //存储二叉树
//后序遍历
void dfs(int x)
{
if(a[x][2]) dfs(a[x][2]);
if(a[x][3]) dfs(a[x][3]);
cout<< x<< " ";
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x;
a[i][1]=x;
//计算x是谁的孩子
//左孩子
if(i%2==0) a[i/2][2]=x;
else a[i/2][3]=x;
}
//输出深度
cout<< (int)(log2(n))+1<<endl;
dfs(1);
return 0;
}
2183 - 求二叉树的深度及遍历结果
于 2023-02-17 12:29:01 首次发布