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

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

转载于:https://www.cnblogs.com/chenxiwenruo/p/3349627.html

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

  1. POJ 1577 Falling Leaves(二叉查找树)

    题目链接:http://poj.org/problem?id=1577 题目大意: 二叉查找树按照叶子节点,从下往上抹去该树,给出抹除字符序列,求该二叉树,并前序打印 解题思路: 最后抹除的是根节点, ...

  2. c#二叉树 取叶子节点个数_两种类似但是原理不同的算法求二叉树的所有叶子节点和...

    技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完. 目前我选择C语言,Python和Java作为实现语言,因为这三种 ...

  3. java计算二叉树的节点最小值_求二叉树根节点到叶子节点路径和的最小值:遍历(递归+非递归)...

    昨晚中兴笔试题,第一题是给定二叉树,每个节点的数据结构是 value,left,right,比较根节点到各个叶子节点路径和的大小,输出路径和的最小值.(补充:用ArrayList可以存储) 以前没做过 ...

  4. 获取二叉树的所有叶子节点、获取全树深度与左右子树深度求解:递归

    树的左右子树深度 全树的深度 //因为我们现在能够不重复,不遗漏获取每一个节点,只有前中后序3种方法,所以,我们首先先写出 //先序递归获取树的深度 int hight = 0;//它可以在多个函数之 ...

  5. 数据结构 | 第十一章:二叉树和其他树 | 【前序遍历】【中序遍历】【后序遍历】【层次遍历】 | 并查集

    第5-10章:线性结构,元素之间存在线性次序(线性表.数组与矩阵.栈.队列.跳表和散列表 第11-15章:层次结构(二叉树和树.优先队列.竞赛树.搜索树) 文章目录 11.1 树 11.2 二叉树 1 ...

  6. python非递归前序遍历二叉树_LintCode66:二叉树的前序遍历(python)

    66. 二叉树的前序遍历 给出一棵二叉树,返回其节点值的前序遍历. 样例 样例 1: 输入:{1,2,3} 输出:[1,2,3] 解释: 1 / \ 2 3 它将被序列化为{1,2,3} 前序遍历 样 ...

  7. java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...

    前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...

  8. 【算法刷题1】二叉树的前序遍历

    解题思路 什么是二叉树的前序遍历?简单来说就是"根左右",展开来说就是对于一颗二叉树优先访问其根节点,然后访问它的左子树,等左子树全部访问完了再访问其右子树,而对于子树也按照之前的 ...

  9. 二叉树的先中后序递归和非递归遍历(数据结构作业)

    一.设计思想 我创建二叉树是用的先序创建,其中用'#'代表空节点. 1.递归先序遍历 (1)如果当前节点为空节点(用'#'代表空节点),结束当前函数 (2)打印当前节点 (2)递归当前节点的左子树 ( ...

最新文章

  1. HDU 2079 选课时间
  2. 通过命令行使用 JAX-WS调用webservice
  3. No identities are available for signing 的解决办法
  4. 某个网页一直不停刷新_利用浏览器做网页长截图
  5. perl 判断不包含某字符串
  6. ZT:Delphi源程序格式书写规范
  7. c语言删除功能,程序的删除功能有问题,不知怎么改
  8. 阶段3 3.SpringMVC·_07.SSM整合案例_04.ssm整合之编写SpringMVC框架
  9. 如何设计 user 表?加入第三方登录呢?
  10. 《UNIX编程艺术》--读书笔记
  11. 计算机枚举法教案,简单枚举算法教案.ppt
  12. 利用scrapy工具,实现一键获取多个项目数据的功能
  13. Joint Autoregressive and Hierarchical Priors for Learned Image Compression文献复现
  14. mysql 索引 insert_Mysql 大批量数据insert or update与UQ索引
  15. 北大韦神等十人获奖,均分1000万元,达摩院2021青橙奖出炉
  16. [模拟电路]ADI放大器笔记 - 差分放大器单端输入电阻设计
  17. 【原创达人】ZUK HD-1 双发声单元圈铁耳机
  18. PairWork2必应词典测试补交作业-孙胜-刘明
  19. MIT 线性代数 习题课
  20. Arm 为智能摄像头提供安全的计算机视觉

热门文章

  1. 问懵逼:请站在 JVM 角度谈谈 Java 的锁?
  2. 一文了解OOM及解决方案
  3. Spring Cloud Gateway(过滤器)
  4. Object C为UILabel添加点击事件
  5. struts2框架入门
  6. -%3e运算符在c语言中的作用,C语言逻辑运算符知识整理
  7. 京东数科宣布机房巡检AI机器人落地金融机构数据中心
  8. plsql tables 没有表_InnoDB 层锁、事务、统计信息字典表 | 全方位认识 information_schema...
  9. python文件处理,python文件处理
  10. AI:Algorithmia《2021 enterprise trends in machine learning 2021年机器学习的企业趋势》翻译与解读