POJ 3437 Tree Grafting(二叉树高度)
来源:互联网 发布:智云软件开发 编辑:程序博客网 时间:2024/05/29 08:26
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
首先,贴上多叉树转二叉树的方法:
方法非常简单,"左儿子,右兄弟"
就是将一个节点的第一个儿子放在左儿子的位置,下一个的儿子,即左儿子的第一个兄弟,
放在左儿子的右儿子位置上,再下一个兄弟接着放在右儿子的右儿子.
由题目给出的字符串,可以轻松求出多叉树.但是题目问的是转为二叉树的高度......
由于多叉树转二叉树的方法是"左儿子右兄弟",因此 二叉树中X节点的高=二叉树中X的父节点的高+X是第几个儿子-1
形成了一个递归定义. 可以用递归算法解决.
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;char str[1000000]; //可以用stringint height1,height2;int len,i;void caculate(int level1,int level2){ if(i == len) return ; int tempson = 0; while(str[i] == 'd') { i++; tempson++; caculate(level1+1,level2+tempson); } if(height1 < level1) height1 = level1; if(height2 < level2) height2 = level2; i++;}int main(){ int t = 1; while(cin>>str) { if(str[0] == '#') break; height1 = height2 = 0; len = strlen(str); i = 0; caculate(0,0); printf("Tree %d: %d => %d\n",t++,height1,height2); } return 0;}
- POJ 3437 Tree Grafting(二叉树高度)
- POJ 3437 Tree Grafting 多叉树转二叉树
- 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(有序树转化为二叉树)
- po3437求出有序树转化为二叉树前后的高度 Tree Grafting
- (二叉树递归)A - Tree Grafting(9.1.1)
- Tree Grafting,树转换成二叉树,tree recovery,遍历顺序确定二叉树
- Tree Grafting
- Tree Grafting
- Poj Tree Grafting 解题报告 (左儿子右兄弟)
- 【LeetCode笔记】Balanced Binary Tree 高度平衡二叉树
- POJ 2255 Tree Recovery 二叉树遍历
- POJ 2255 Tree Recovery [二叉树]
- codeblocks的c99设置
- 关于嵌入式系统的学习路线图
- UVA_11800_DetermineTheShape
- block循环引用的理解和self.navigationController的理解
- list_entry(ptr, type, member)
- POJ 3437 Tree Grafting(二叉树高度)
- 面试问题
- Spark启动错误Exception in thread “main” java.lang.NoSuchMethodError: scala.collection.immutable.HashSet$
- apue第三版 在信号处理程序中调用不可再入函数 的例子遇到的问题
- [53]Maximum Subarray
- 实时操作系统
- 杭电-4500小Q系列故事——屌丝的逆袭
- ab压力测试工具
- SQL server中按照某个字段查询排名问题