一道和Leetcode的一道题目基本上一样的题目。

给出前序遍历和中序遍历序列,要求依据这些信息恢复一颗二叉树的原貌,然后按后序遍历序列输出。

Leetcode上有给出后序和中序,恢复二叉树的。

只是事实上算法都是一样的。仿佛又回到了做Leetcode题的那段岁月中了。

还有就是输入是我特别处理过的,就两个函数,大家会了的无视,不会的能够学习下。

#include <stdio.h>
#include <string>
#include <algorithm>
using std::string;const int MAX_B = 1024;
char buf[MAX_B];
int id = 0, len = 0;inline char getFromBuf()
{if (id >= len){len = fread(buf, 1, MAX_B, stdin);id = 0;}return buf[id++];
}void getStrFromBuf(string &n)
{char a = getFromBuf();while ((a == ' ' || a == '\n') && len) a = getFromBuf();n.clear();while ((a != ' ' && a != '\n') && len)//老是写&&,错成||{n.push_back(a);a = getFromBuf();}
}struct Node
{char alpha;Node *left, *right;explicit Node (char a = ' ') : alpha(a), left(NULL), right(NULL) {}
};Node *recover(string &preo, int p1, int p2, string &ino, int i1, int i2)
{if (p1 > p2) return NULL;Node *root = new Node(preo[p1]);int off = 0;for ( ; ino[i1+off] != preo[p1]; off++);root->left = recover(preo, p1+1, p1+off, ino, i1, i1+off-1);root->right = recover(preo, p1+off+1, p2, ino, i1+off+1, i2);return root;
}void releaAndPrintTree(Node *r)
{if (r){releaAndPrintTree(r->left);releaAndPrintTree(r->right);putchar(r->alpha);delete r; r = NULL;}
}int main()
{string preo, ino;while (true){getStrFromBuf(preo);if (len == 0) break;getStrFromBuf(ino);releaAndPrintTree(recover(preo, 0, (int)preo.size()-1, ino, 0, (int)ino.size()-1));putchar('\n');}return 0;
}

POJ 2255 Tree Recovery 二叉树恢复相关推荐

  1. POJ 2255 Tree Recovery(已知前序中序,求后序)

    1. 题目链接:http://poj.org/problem?id=2255 2. 题目大意: 给定二叉树的前序和中序序列,输出其后序序列 3. 思考过程: 4. AC代码 /*** @descrip ...

  2. poj 2255 Tree Recovery 解题报告

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 题目出处 ...

  3. poj 2255 Tree Recovery

    #include <iostream> //给出先序和中序遍历序列,输出后序遍历序列#include <string.h>using namespace std;const i ...

  4. Uva536 Tree Recovery二叉树重建(先序和中序确定二叉树,后序输出)

    题目大意:给定二叉树先序和中序遍历,输出二叉树后序遍历. 方法:将英文字母映射为数字,利用数组存储,先序第一个节点是父节点,然后再从中序遍历中找到位置.注意边界.代码也很简单一次ac. #includ ...

  5. [LeetCode] Binary Tree Paths - 二叉树基础系列题目

    目录: 1.Binary Tree Paths - 求二叉树路径 2.Same Tree - 判断二叉树相等 3.Symmetric Tree - 判断二叉树对称镜像 Binary Tree Path ...

  6. Tree Traversal(二叉树的遍历)

    Binary Tree 二叉树 Full Binary Tree 满二叉树 叶节点都在最底层,其他节点都有左.右子节点. N = 2^L - 1 Complete Binary Tree 完全二叉树 ...

  7. 『数据结构与算法』解读树(Tree)和二叉树(Binary Tree)!

    『数据结构与算法』解读树(Tree)和二叉树(Binary Tree)! 文章目录 一. 树 1.1. 树的定义 1.2. 树的基本术语 1.3. 树的性质 二. 二叉树 2.1. 二叉树的定义 2. ...

  8. poj 1145 Tree Summing

    // poj 1145 Tree Summing /* 交了好多遍才过,注意几点: 1.输入可能有负数:2.叶子节点判断要准确,是两个子节点都没有的节点:3.空树答案为no */ #include & ...

  9. c++实现简单的数据结构(1.链表合并 2.士兵队列训练问题 3.Rails 4.Josephus Problem 5.Tree Recovery 6.四则运算 7.愚人节的礼物 8.Web)

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮 ...

最新文章

  1. GRE over IPSEC ×××
  2. ftp服务----基于虚拟用户的创建
  3. 037——VUE中表单控件处理之表单修饰符:lazy/number/trim
  4. php udp 非阻塞,使用非阻塞udp读取时丢失消息
  5. JavaScript强化教程 —— JavaScript 总结
  6. 如何开始使用LightZone
  7. 一种基于说话人识别和数字语音识别的身份认证方法与流程
  8. sans serif字体_30种免费的Sans Serif字体下载
  9. 00 后搞视频号月入过万,怎么做?
  10. 还在手写记单词?使用Python开发练习英语单词,助你逆袭单词记忆王!
  11. mysqld --initialize 错误:mysqld: Can‘t create/write to file ‘G: ool\mysql\data\is_writable‘
  12. 基于javaweb的教室信息管理系统
  13. 计算机二级msoffice应用基础,计算机二级MSOffice高级应用考试基础知识
  14. 学习日记——8 20
  15. C#注册和注销全局快捷键
  16. eSDK 华为ICT能力开放平台
  17. Oracle怎么查hex值,oracle 进制转换 HEX/DECIMAL/OCTAL/BINARY
  18. html里用js实现随机抽奖,js实现简单随机抽奖的方法
  19. 赠书 | 《大型网站运维:从系统管理到SRE》
  20. c语言第二版课后答案pdf,数据结构(C语言版)第2版习题答案—严蔚敏.pdf

热门文章

  1. mysql获取多层嵌套json_使用两个mySQL查询来创建嵌套的JSON数组
  2. 使用Pad Designer制作焊盘
  3. matlab 图像中用text文字标注
  4. FPGA设计思想之“逻辑复制”
  5. 【 Linux 】Linux下如何退出vim的一些常用命令总结
  6. SaaS创业型企业如何打破销售瓶颈?
  7. ios 工具大全,最全框架
  8. java学习笔记-4.7
  9. SpringMVC中重定向
  10. zabbix企业应用之low level discovery监控磁盘吞吐量与iops