题目:http://www.wikioi.com/problem/1501/

给你一颗二叉树,求该数的宽和高,

首先求出树的高,直接进行二叉树遍历,能够得到二叉树的高

然后是得到宽,本人采用的是一层一层的遍历,求出每一层节点的个数,最大的则是该树的宽了,

代码:

 #include <cstdio>
#include <cstring>
#include <stack>
#include <queue>
#include <iostream> using namespace std; #define L 1
#define R 2
class tree{
private:
int a[][],h,w;
stack<int> mystack;
public:
tree();
void set_tree(int i,int x,int y);
void tree_h(int i,int t);//得到高
void BFS(int t);//得到宽
int get_h();
int get_w();
}; tree::tree()
{
memset(a,,sizeof(a));
h = ;
w = ;
} void tree::set_tree(int i,int x,int y)
{
a[i][L] = x;
a[i][R] = y;
}
int tree::get_h()
{
int t = ;
tree::tree_h(a[][L],t+);
tree::tree_h(a[][R],t+);
return h-;
}
int tree::get_w()
{
mystack.push();
tree::BFS();
return w;
}
void tree::BFS(int i)
{
if(i <= h)
{
int t = ,x;
stack<int> tmpstack;
while(mystack.empty() == false)
{
x = mystack.top();
mystack.pop();
if(x != )
{
t++;
tmpstack.push(a[x][L]);
tmpstack.push(a[x][R]);
}
} w = w > t ? w : t;
mystack = tmpstack;
tree::BFS(i+);
}
} void tree::tree_h(int i,int t)
{
if(i == )
{
h = h > t ? h : t;
return;
}
else
{
tree::tree_h(a[i][L],t+);
tree::tree_h(a[i][R],t+);
}
}
int main()
{
int n,x,y;
while(~scanf("%d",&n))
{
tree mytree;
for(int i = ; i <= n; i++)
{
scanf("%d%d",&x,&y);
mytree.set_tree(i,x,y);
}
int h = mytree.get_h();
int w = mytree.get_w();
printf("%d %d\n",w,h);
}
return ;
}

1501 二叉树最大宽度和高度 (BFS+树的遍历)的更多相关文章

  1. codevs——1501 二叉树最大宽度和高度

    1501 二叉树最大宽度和高度  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解       题目描述 Description 给出一个二叉树,输出它的 ...

  2. codevs 1501 二叉树最大宽度和高度x

                         题目描述 Description 给出一个二叉树,输出它的最大宽度和高度. 输入描述 Input Description 第一行一个整数n. 下面n行每行有两 ...

  3. AC日记——二叉树最大宽度和高度 1501 codevs

    1501 二叉树最大宽度和高度  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver     题目描述 Description   给出一个二叉树,输出它的最大宽 ...

  4. Codevs 1051 二叉树最大宽度和高度

    1501 二叉树最大宽度和高度  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver       题目描述 Description 给出一个二叉树,输出它的最大宽 ...

  5. codevs1501 二叉树最大宽度和高度

    难度等级:白银    1501 二叉树最大宽度和高度 题目描述 Description 给出一个二叉树,输出它的最大宽度和高度. 输入描述 Input Description 第一行一个整数n. 下面 ...

  6. ACM题目————二叉树最大宽度和高度

    http://codevs.cn/problem/1501/   题目描述 Description 给出一个二叉树,输出它的最大宽度和高度. 输入描述 Input Description 第一行一个整 ...

  7. [wikioi]二叉树最大宽度和高度

    简单的DFS,用数组w记录每一层的宽度就行了,就是遇到一层就++.中间发现在C++里面,如果int未初始化就是用也是有异常的.还有二叉树的数组表示时,从1开始计数会比较好.还有后来学会了数组这样的初始 ...

  8. Codevs 1501 二叉树的最大宽度和高度

    1501 二叉树最大宽度和高度 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 给出一个二叉树,输出它的最大宽度和高度. 输入描 ...

  9. 二叉树 Java 实现 前序遍历 中序遍历 后序遍历 层级遍历 获取叶节点 宽度 ,高度,队列实现二叉树遍历 求二叉树的最大距离

    数据结构中一直对二叉树不是很了解,今天趁着这个时间整理一下 许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显 ...

随机推荐

  1. (转)C#DataTable学习心得

    一.DataSet.DataTable.DataRow.DataColumn 1] 在DataSet中添加DataTable DataSet.Tables.Add(DataTable) 实例: Dat ...

  2. 20151222--Ajax三级无刷新

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  3. PHP性能如何实现全面优化?

    性能是网站运行是否良好的关键因素, 网站的性能与效率影响着公司的运营成本及长远发展,编写出高质高效的代码是我们每个开发人员必备的素质,也是我们良好的职业素养. 如何优化PHP性能呢? 一.变量(重要) ...

  4. 基于nginx+lua简单的灰度发布系统

    upstream.conf upstream grey_1 { keepalive 1000; server localhost:8020; } upstream grey_2 { keepalive ...

  5. CodeForces 379 D. New Year Letter

    枚举开头结尾的字母,枚举ac的个数,总AC个数就是两个Fibonacci数列的和..... D. New Year Letter time limit per test 1 second memory ...

  6. shell基础认识

    Shell 我们在终端下写命令Linux内核是看不懂的必须通过shell解释成内核可执行的代码 这就是shell(其实解释命令这只是它的一个功能模块,shell还可以用来进行程序设计) 有点类似win ...

  7. 001.web前端-学习了解

    学习web前端开发基础技术需要掌握:HTML.CSS.JavaScript语言.下面我们就来了解下这三门技术都是用来实现什么的: 1.html(Hypertext Markup Language)—— ...

  8. Javascript 字符串浏览器兼容问题

    先看下不兼容的写法,若我想获取某个字符串的第几位 var str='aavvvcc'; console.info(str[0]); 这种写法 在IE 7以下的浏览器都不兼容,以下提供浏览器全兼容的方式 ...

  9. composer时间长了,提示需要升级,结果问题来了

    今天重新开始之前的laravel项目,结果composer提示需要升级,于是 composer selfupdate 结果提示无法连接目标库,查阅composer官网,发现之前的库地址已经启用了ssl ...

  10. 括号匹配算法 C语言实现

    #include <stdio.h> #include <malloc.h> //malloc,realloc #include <math.h> //含有over ...