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

#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. qt QLabel 显示网络图片

    在网上试了很多代码都不能使用,自己写了写代码. 直接上代码 Codevoid QMusicLogo::setNetworkPic(const QString &szUrl) { QUrl ur ...

  2. java.util.TreeMap源码分析

    TreeMap的实现基于红黑树,排列的顺序根据key的大小,或者在创建时提供的比较器,取决于使用哪个构造器. 对于,containsKey,get,put,remove操作,保证时间复杂度为log(n ...

  3. IntelliJ IDEA+Tomcat+Nginx运行git项目

    1.克隆Git项目到本地 (1)设置Git工具路径:file>settings>Version Control>Git (2)设置GitHub账户:file>settings& ...

  4. javascript 数字字符串转为数字

    var a="111"; comsole.log(a);     //打印出来是个字符串类型 comsole.log(+a);   //打印出来是个数字类型 comsole.log ...

  5. V2EX社区

    无论你是在大学进行人生最重要阶段的学习,或者是在中国的某座城市工作,或者是在外太空的某个天体如 Sputnik 1 上享受人生,在注册进入 V2EX 之后,你都可以为自己设置一个所在地,从而找到更多和 ...

  6. js 函数闭包内部返回函数体调用方法难点解答

    今天在网上,看到一篇关于js函数难点的文章,js函数的一些难点.在那上面提了一下,关于js函数返回另一个函数的问题,并附上了一道面试题: var add = function(x){ var sum ...

  7. Linux 下常用的压缩,解压方法

    压缩命令: tar.gz 格式: tar -zcvf  自定义压缩文件名.tar.gz   被压缩文件名 zip 格式: zip -r 自定义压缩文件名.zip 被压缩文件名 如果要压缩整个文件夹,也 ...

  8. WordPress 主题开发 - (三) 开发工具 待翻译

    Before we get started building any WordPress Theme, we’re going to need to get our development tools ...

  9. ThoughtWorks FizzBuzzWhizz 代码实现

    当时拉钩网ThoughtWorks出了一道面试题(https://www.jinshuju.net/f/EGQL3D),本人用PHP实现了一下,当时忘记了把代码分享出来,今天特来补上. FizzBuz ...

  10. centos系统下安装使用composer教程

    Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们.Composer 不是一个包管理器.是的,它涉及 "packages" ...