POJ---3437-Tree Grafting
来源:互联网 发布:sony 电视 知乎 编辑:程序博客网 时间:2024/05/29 07:05
Description
- there is one node designated as the root, denoted root(T);
- the remaining nodes are partitioned into subsets T1, T2, ..., Tm, each of which is also a tree (subtrees).
It is often more convenient to represent an ordered tree as a rooted binary tree, so that each node can be stored in the same amount of memory. The conversion is performed by the following steps:
- remove all edges from each node to its children;
- for each node, add an edge to its first child in T (if any) as the left child;
- for each node, add an edge to its next sibling in T (if any) as the right child.
This is illustrated by the following:
0 0 / | \ / 1 2 3 ===> 1 / \ \ 4 5 2 / \ 4 3 \ 5
In most cases, the height of the tree (the number of edges in the longest root-to-leaf path) increases after the conversion. This is undesirable because the complexity of many algorithms on trees depends on its height.
You are asked to write a program that computes the height of the tree before and after the conversion.
Input
The input is given by a number of lines giving the directions taken in a depth-first traversal of the trees. There is one line for each tree. For example, the tree above would give dudduduudu, meaning 0 down to 1, 1 up to 0, 0 down to 2, etc. The input is terminated by a line whose first character is #. You may assume that each tree has at least 2 and no more than 10000 nodes.
Output
For each tree, print the heights of the tree before and after the conversion specified above. Use the format:
where t is the case number (starting from 1), h1 is the height of the tree before the conversion, and h2 is the height of the tree after the conversion.Tree t: h1 => h2
Sample Input
dudduduududdddduuuuudddduduuuudddduuduuu#
Sample Output
Tree 1: 2 => 4Tree 2: 5 => 5Tree 3: 4 => 5Tree 4: 4 => 4
Source
#include <iostream>#include <cstring>#include <cstdio>#include <cmath>using namespace std;string s;int i,height1,height2;void work(int level1,int level2,int son){ int temp=0; while(s[i]=='d') { i++; temp++; work(level1+1,level2+temp,temp); } height1=max(level1,height1); height2=max(level2,height2); ++i;}int main(){ // cout << "Hello world!" << endl; int Case=1; while(cin>>s && s[0]!='#') { i=height1=height2=0; work(0,0,1); cout<<"Tree "<<Case++<<": "<<height1<<" => "<<height2<<endl; } return 0;}
- POJ 3437 Tree Grafting
- POJ 3437 Tree Grafting
- POJ 3437 Tree Grafting
- POJ 3437 Tree Grafting
- POJ---3437-Tree Grafting
- Tree Grafting(POJ 3437)
- POJ 3437 Tree Grafting 多叉树转二叉树
- POJ 3437 Tree Grafting(二叉树高度)
- Tree Grafting
- Tree Grafting
- POJ 3437 Tree Grafting(有序树转化为二叉树)
- Poj Tree Grafting 解题报告 (左儿子右兄弟)
- (二叉树递归)A - Tree Grafting(9.1.1)
- Tree Grafting,树转换成二叉树,tree recovery,遍历顺序确定二叉树
- po3437求出有序树转化为二叉树前后的高度 Tree Grafting
- POJ Tree
- Tree POJ
- poj-2255-Tree Recovery(tree)
- Java程序设置界面为Nimbus风格x
- 【HTTP】如何正常关闭连接
- Block传值通讯录练习
- Java书籍
- 关于c语言动态分配内存的知识点的总结(总结)
- POJ---3437-Tree Grafting
- warning C4996: 'sprintf': This function or variable may be unsafe.
- 归并排序原理及实现
- 应去掉中医中的”玄“
- 学籍管理系统选择学校窗口缺陷
- Trie树:应用于统计和排序
- java软件工程师的必备技能
- C#流程控制语句
- Android 之自定义控件样式在drawable文件夹下的XML实现