1501 二叉树最大宽度和高度 (BFS+树的遍历)
题目: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+树的遍历)的更多相关文章
- codevs——1501 二叉树最大宽度和高度
1501 二叉树最大宽度和高度 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 给出一个二叉树,输出它的 ...
- codevs 1501 二叉树最大宽度和高度x
题目描述 Description 给出一个二叉树,输出它的最大宽度和高度. 输入描述 Input Description 第一行一个整数n. 下面n行每行有两 ...
- AC日记——二叉树最大宽度和高度 1501 codevs
1501 二叉树最大宽度和高度 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 给出一个二叉树,输出它的最大宽 ...
- Codevs 1051 二叉树最大宽度和高度
1501 二叉树最大宽度和高度 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 给出一个二叉树,输出它的最大宽 ...
- codevs1501 二叉树最大宽度和高度
难度等级:白银 1501 二叉树最大宽度和高度 题目描述 Description 给出一个二叉树,输出它的最大宽度和高度. 输入描述 Input Description 第一行一个整数n. 下面 ...
- ACM题目————二叉树最大宽度和高度
http://codevs.cn/problem/1501/ 题目描述 Description 给出一个二叉树,输出它的最大宽度和高度. 输入描述 Input Description 第一行一个整 ...
- [wikioi]二叉树最大宽度和高度
简单的DFS,用数组w记录每一层的宽度就行了,就是遇到一层就++.中间发现在C++里面,如果int未初始化就是用也是有异常的.还有二叉树的数组表示时,从1开始计数会比较好.还有后来学会了数组这样的初始 ...
- Codevs 1501 二叉树的最大宽度和高度
1501 二叉树最大宽度和高度 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 给出一个二叉树,输出它的最大宽度和高度. 输入描 ...
- 二叉树 Java 实现 前序遍历 中序遍历 后序遍历 层级遍历 获取叶节点 宽度 ,高度,队列实现二叉树遍历 求二叉树的最大距离
数据结构中一直对二叉树不是很了解,今天趁着这个时间整理一下 许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显 ...
随机推荐
- (转)C#DataTable学习心得
一.DataSet.DataTable.DataRow.DataColumn 1] 在DataSet中添加DataTable DataSet.Tables.Add(DataTable) 实例: Dat ...
- 20151222--Ajax三级无刷新
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- PHP性能如何实现全面优化?
性能是网站运行是否良好的关键因素, 网站的性能与效率影响着公司的运营成本及长远发展,编写出高质高效的代码是我们每个开发人员必备的素质,也是我们良好的职业素养. 如何优化PHP性能呢? 一.变量(重要) ...
- 基于nginx+lua简单的灰度发布系统
upstream.conf upstream grey_1 { keepalive 1000; server localhost:8020; } upstream grey_2 { keepalive ...
- CodeForces 379 D. New Year Letter
枚举开头结尾的字母,枚举ac的个数,总AC个数就是两个Fibonacci数列的和..... D. New Year Letter time limit per test 1 second memory ...
- shell基础认识
Shell 我们在终端下写命令Linux内核是看不懂的必须通过shell解释成内核可执行的代码 这就是shell(其实解释命令这只是它的一个功能模块,shell还可以用来进行程序设计) 有点类似win ...
- 001.web前端-学习了解
学习web前端开发基础技术需要掌握:HTML.CSS.JavaScript语言.下面我们就来了解下这三门技术都是用来实现什么的: 1.html(Hypertext Markup Language)—— ...
- Javascript 字符串浏览器兼容问题
先看下不兼容的写法,若我想获取某个字符串的第几位 var str='aavvvcc'; console.info(str[0]); 这种写法 在IE 7以下的浏览器都不兼容,以下提供浏览器全兼容的方式 ...
- composer时间长了,提示需要升级,结果问题来了
今天重新开始之前的laravel项目,结果composer提示需要升级,于是 composer selfupdate 结果提示无法连接目标库,查阅composer官网,发现之前的库地址已经启用了ssl ...
- 括号匹配算法 C语言实现
#include <stdio.h> #include <malloc.h> //malloc,realloc #include <math.h> //含有over ...