空说无益,上题分析!
Description二叉树的宽度指的是具有节点数目最多的那一层的节点个数。
1 / \ 2 3 / 4 答案为2, 第二层节点数最多,为2个节点。
输入格式共n行。
第一行一个整数n,表示有n个结点,编号为1至n,结点1为树根。
(1<=n<=50) 第二行至第n行,每行有两个整数x和y,表示在二叉树中x为y的父节点。
x第一次出现时y为左孩子
输出格式输出二叉树的宽度。输入样例
5 1 2 1 3 2 4 2 5输出样例2
显然,只需要层次遍历即可求出最宽的那一层;
思路就是用两个队列;
代码如下:
//二叉树的宽度
#include
#include
#include
#include
using namespace std;
int st[20][3];
int n;
queue temp1; //存放结点
queue temp2; //辅助
int ans;
void dfs(int root){
if(temp1.empty()){
return ;
}
int size = temp1.size();
ans = max(ans,size);
while(!temp1.empty()){
int pos = temp1.front();
if(st[pos][1]!=0){
temp2.push(st[pos][1]);
}
if(st[pos][2]!=0){
temp2.push(st[pos][2]);
}
temp1.pop();
}
temp1.swap(temp2);
dfs(temp1.front());//对下一层遍历
}
int main(){
cin>>n;
st[1][0] =1;
for(int i=1;i>root>>child;
if(st[root][1]==0){
st[root][1] = child;
st[st[root][1]][0] = child;
}else{
st[root][2] = child;
st[st[root][2]][0] = child;
}
}
temp1.push(1); //放入根结点,这里默认树是存在的
dfs(temp1.front());
cout<
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)