Poj Tree Grafting 解题报告 (左儿子右兄弟)
来源:互联网 发布:阿里云建网站靠谱吗 编辑:程序博客网 时间:2024/05/29 07:34
题目链接:http://dsalgo.openjudge.cn/tree/7/
借着一题来总结一下多叉树和二叉树的关系:多叉树和二叉树是等价的。
如果使用在一个节点内保存的是指向第一个儿子(为了方便加上最后一个儿子也是极好的)和兄弟的指针的方法维护一棵树,那么棵树是多叉树还是二叉树全在乎遍历的方式。如图所示:
将右边的兄弟作为儿子节点来看,这就是一颗二叉树(左儿子右兄弟表示法)
对于这道题,我有两个思路:
1. 不建树:多叉树的深度=在整个树的输入中d的个数超过u的个数最大的那个值,这个统计一下或递归计算一下就可以了;对于相应的二叉树的深度,观察可知儿子节点的深度=父结点深度+这是第几个儿子节点,由此递归即可,递归基是没有儿子节点的情况。
2. 建树:每个节点保留父节点指针,兄弟节点指针,第一个和最后一个儿子节点指针。遇到’d’就添加儿子节点,遇到’u’就返回到父节点。得到树后,两种高度都可以用深度优先(在这里相当于先序遍历)来求得,区别在于把右兄弟当作什么角色。
我在这里只实现了思路1.
#include <cstdio>const int MAXN = 20010;int Bheight, Mheight;void recursiveCount(char * str, int& ind, int Blevel, int Mlevel){ int son = 0; while('d' == str[ind]) { ++ind; ++son; recursiveCount(str, ind, Blevel+1, Mlevel+son); } //这里str[ind] = 'u'要返回上一层,相当于回到父节点处 ++ind; Bheight = Blevel>Bheight?Blevel:Bheight; Mheight = Mlevel>Mheight?Mlevel:Mheight;} int main(){ char str[MAXN]; int tree = 0; int ind; while(gets(str) && str[0] != '#') { Bheight = 0; Mheight = 0; ++tree; ind = 0; recursiveCount(str, ind, 0, 0); printf("Tree %d: %d => %d\n", tree, Bheight, Mheight); } return 0;}
阅读全文
0 0
- Poj Tree Grafting 解题报告 (左儿子右兄弟)
- UVA 11732 strcmp() Anyone?(左儿子右兄弟Trie)
- ioi 2005--河流 [左儿子右兄弟]
- UVA11732 左儿子右兄弟 Trie
- UVA 11732-"strcmp()" Anyone?-trie(左儿子右兄弟表示法(省空间))
- 树的左儿子右兄弟表示法
- UVA 11732("strcmp()" Anyone?-Trie与左兄弟右儿子)
- 左儿子右兄弟Trie UVA 11732 strcmp() Anyone?
- Uva 11732 "strcmp()" Anyone? 左儿子右兄弟的trie
- POJ 3437 Tree Grafting
- POJ 3437 Tree Grafting
- POJ 3437 Tree Grafting
- POJ 3437 Tree Grafting
- POJ---3437-Tree Grafting
- Tree Grafting(POJ 3437)
- UVA 11732 —— 左儿子右兄弟表示法&&Tire
- trie树 和 树的存储--左儿子右兄弟 --- uva 11732
- UVA 11732 "strcmp()" Anyone? Trie树 + 树的左儿子右兄弟存储法
- E
- BMX2WAV 软件汉化及部分参数说明
- mac安装python3.6
- 229. Majority Element II
- 过滤代码中的中文字符(C)
- Poj Tree Grafting 解题报告 (左儿子右兄弟)
- Android NullPointerException FragmentHostCallback.getHandler()
- 51单片机ucos ii任务切换汇编代码分析(2)
- idea中使用Mybatis-generator自动生成数据库持久层代码
- Bootstrap(四十)
- websocket入门系列:二Tomcat实现
- Oracle复制表结构和表数据
- node npm 设置全局仓库路径
- 易佰