码迷,mamicode.com
首页 > 其他好文 > 详细

【树】强行树的深度和宽度

时间:2018-07-13 13:22:20      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:include   pre   bsp   sharp   struct   mes   space   argv   ide   

#include <iostream>
using namespace std;
struct point{
	int r,l;//左孩右孩 
	int c;//在第几层 
	int f;//父节点 
}p[20];
int c[1000]={0};//储存第i层节点个数 
int n,w,h,ma;

int main(int argc, char *argv[])
{
	int i,cc,w=0;
	cin>>n;
	if(n==1){cout<<1<<" "<<1;return 0;}
	if(n==0){cout<<0<<" "<<0;return 0;}
	for(i=1;i<=n;i++)
	{
		cin>>p[i].r>>p[i].l;
		p[p[i].r].f=i;
		p[p[i].l].f=i;
	}
	p[1].f=-1; p[1].c=1;
	for(i=2;i<=n;i++)
		p[i].c=p[p[i].f].c+1;
	cc=p[n].c;
	for(i=1;i<=n;i++)
		if(p[i].c==cc)w++;
	cout<<w<<‘ ‘<<cc;
	return 0;
}

  

我也不知道能不能这么写吧虽然,反正看起来蛮对的。

 

深搜↓

#include<stdio.h>
#include<string.h>
int a[1000][2],s[1000];  //s[i]=x表示二叉树第i层有x个节点
int i,n,maxHight,maxWide;   
void dfs(int i,int k)  //i表示当前搜索的是第i个节点。k表示当前搜索到二叉树的第k层。
{  
    s[k]=s[k]+1;//s[k]表示二叉树中第k层的节点数目 
    if(k>maxHight)  maxHight=k;  
    if(a[i][0]!=0)  dfs(a[i][0],k+1);
    if(a[i][1]!=0)  dfs(a[i][1],k+1);
}
int main()  
{  
    scanf("%d",&n);  
    memset(a,0,sizeof(a));  
    memset(s,0,sizeof(s));  
    for(i=1;i<=n;i++)  
        scanf("%d%d",&a[i][0],&a[i][1]);  
    maxHight=0;
    dfs(1,1);
    maxWide=0;
    for(i=1;i<1000;i++)
        if(s[i]>maxWide)   maxWide=s[i];
    printf("%d %d",maxWide,maxHight);
    return 0;

  

【树】强行树的深度和宽度

标签:include   pre   bsp   sharp   struct   mes   space   argv   ide   

原文地址:https://www.cnblogs.com/cici08/p/9304278.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!