题意:给出一棵字母二叉树删除叶子节点的序列,按删除的顺序排列。让你输出该棵二叉树额前序遍历的序列。
思路:先把一棵树的所有删除的叶子节点序列存储下来,然后从最后一行字符串开始建树即可,最后遍历输出。
    这里为方便起见,将子母转化成整数值存储。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
/*
AC
题意:给出一棵字母二叉树删除叶子节点的序列,按删除的顺序排列。让你输出该棵二叉树额前序遍历的序列。
思路:先把一棵树的所有删除的叶子节点序列存储下来,然后从最后一行字符串开始建树即可,最后遍历输出。
这里为方便起见,将子母转化成整数值存储。
*/
using namespace std;
const int maxn=;
char str[][]; struct node{
int l,r; //左儿子的值、右儿子的值。若值为-1,表示不存在左/右儿子。
}node[maxn]; void dfs(int u,int v){
if(v<u){
//当u没有左儿子时,v赋值给u的左儿子,否则递归u的左儿子
if(node[u].l==-){
node[u].l=v;
return;
}
else{
dfs(node[u].l,v);
}
}
else{
//当u没有右儿子时,v赋值给u的右儿子,否则递归u的右儿子
if(node[u].r==-){
node[u].r=v;
return;
}
else{
dfs(node[u].r,v);
}
}
}
void dlr_print(int u){
if(node[u].l==-&&node[u].r==-){
printf("%c",u+'A');
return;
}
printf("%c",u+'A');
if(node[u].l!=-)
dlr_print(node[u].l);
if(node[u].r!=-)
dlr_print(node[u].r);
}
int main()
{
int m,u,v;
while(scanf("%s",str[])!=EOF){
for(int i=;i<maxn;i++){
node[i].l=node[i].r=-;
}
m=;
while(){
scanf("%s",str[m]);
if(str[m][]=='*' || str[m][]=='$')
break;
m++;
}
int rootval=str[m-][]-'A'; //根节点的值。
for(int i=m-;i>=;i--){
for(int j=;str[i][j]!='\0';j++){
v=str[i][j]-'A';
dfs(rootval,v);
}
}
//前序遍历输出
dlr_print(rootval);
printf("\n");
}
return ;
}

POJ 1577 Falling Leaves (子母二叉树,给出叶子节点的删除序列,求前序遍历)的更多相关文章

  1. POJ 1577 Falling Leaves 二叉搜索树

    HDU 3791 Falling Leaves 二叉搜索树  Figure 1Figure 1 shows a graphical representation of a binary tree of ...

  2. 【二叉搜索树】poj 1577 Falling Leaves

    http://poj.org/problem?id=1577 [题意] 有一颗二叉搜索树,每次操作都把二叉搜索树的叶子从左到右揪掉(露出来的父节点就变成了新的叶子结点) 先给出了揪掉的叶子序列(多个字 ...

  3. POJ 1577 Falling Leaves

    题意:给出一些字符串,从上到下的建树,输出其前序遍历 像前面那一题一样,先建树,然后再递归前序遍历 不过想像上一题那样用数组建树,建树和上题一样的办法,可是应该怎么输出前序遍历呢= = 还是看的题解= ...

  4. POJ 1577 Falling Leaves(二叉搜索树)

    思路:当时学长讲了之后,似乎有点思路----------就是倒着建一个  二叉搜索树 代码1:超时 详见超时原因 #include<iostream> #include<cstrin ...

  5. uva 699 The Falling Leaves(建二叉树同一时候求和)

    本来看着挺难的.大概是由于我多瞟了一眼题解,瞬间认为简单多了.做题就得这样,多自己想想.如今是 多校联赛,然而我并不会做. .. .慢慢来,一直在努力. 分析: 题上说了做多不会超过80行.所以能够开 ...

  6. (原)neuq oj 1022给定二叉树的前序遍历和后序遍历确定二叉树的个数

    题目描述 众所周知,遍历一棵二叉树就是按某条搜索路径巡访其中每个结点,使得每个结点均被访问一次,而且仅被访问一次.最常使用的有三种遍历的方式: 1.前序遍历:若二叉树为空,则空操作:否则先访问根结点, ...

  7. UVA - 699The Falling Leaves(递归先序二叉树)

    The Falling Leaves Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Sub ...

  8. UVA.699 The Falling Leaves (二叉树 思维题)

    UVA.699 The Falling Leaves (二叉树 思维题) 题意分析 理解题意花了好半天,其实就是求建完树后再一条竖线上的所有节点的权值之和,如果按照普通的建树然后在计算的方法,是不方便 ...

  9. UVA 699 The Falling Leaves (二叉树水题)

    本文纯属原创.转载请注明出处,谢谢. http://blog.csdn.net/zip_fan. Description Each year, fall in the North Central re ...

随机推荐

  1. C++ 单链表基本操作

    链表一直是面试的高频题,今天先总结一下单链表的使用,下节再总结双向链表的.本文主要有单链表的创建.插入.删除节点等. 1.概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数 ...

  2. go开发环境配置

  3. 超越luabind的luaBridge

    此编是引用他人的文章,这里记录下,主要为以后自己查找方便,原文地址:http://www.cppblog.com/sunicdavy/archive/2013/12/07/204648.html 最近 ...

  4. IPC with pipes, demo of 'popen'

    #include <stdio.h> #include <unistd.h> int main() { FILE* stream = popen ("sort&quo ...

  5. Spark RDD整理

    参考资料: Spark和RDD模型研究:http://itindex.net/detail/51871-spark-rdd-模型 理解Spark的核心RDD:http://www.infoq.com/ ...

  6. centos6.5安装flume

    这里安装flume是因为游戏业务日志搜集和分析用的 1.安装java 环境rpm -ivh jdk-8u51-linux-x64.rpm Preparing... ################## ...

  7. ADO.NET笔记——存储二进制大对象(BLOB)

    相关知识 上传二进制大对象(Binary Large Object)(如图片.视频等)的基本编程步骤是: 在数据库中使用varbinary(MAX).varchar(MAX)或者nvarchar(MA ...

  8. virtualbox安装centos6.5碰到的问题

    今天无聊用virtualbox安装centos6.5 , 自己笔记本vm撑不住, 用公司的试试virtualbox先 安装快完成时 没有足够的内存配置kdump”(在英文界面下提示的是“insuffi ...

  9. jQuery对input中radio的一些操作

    通过jQuery获取页面中的所有radio对象,遍历页面中的radio,取消选中的标签,因为使用到jQuery时间,因此引用到了网上公共的js,这只是本人的一些总结,大神勿喷. <html> ...

  10. 借Windows说明Linux分区和挂载点[转]

    在介绍Linux分区和挂载点前,我想先说一个Windows的例子,Windows大家都比较熟,再借这个例子来说明什么是Linux分区和挂载点. 1.消失了的分区 在WinPE下,我将一块硬盘分成一个主 ...