7-2 前序序列创建二叉树 (25 分)
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以二叉链表存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,代表一棵空树。然后再对二叉树进行中序遍历,输出遍历结果。

输入格式:
多组测试数据,每组测试数据一行,该行只有一个字符串,长度不超过100。

输出格式:
对于每组数据,

输出二叉树的中序遍历的序列,每个字符后面都有一个空格。

每组输出一行,对应输入的一行字符串。

输入样例:(及其对应的二叉树)

abc##de#g##f###
结尾无空行
输出样例:
c b e g d f a
结尾无空行

C++:

using namespace std;
#include <algorithm>
#include<cstring>
#include <iostream>
#include<string>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include<iomanip>
#include<sstream>
#include<vector>struct TreeNode {char val;TreeNode* left;TreeNode* right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(char x) : val(x), left(nullptr), right(nullptr) {}TreeNode(char x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
};TreeNode *build(const string &s,int& i)
{if (i >= s.size()||s[i]=='#')return NULL;TreeNode* root = new TreeNode(s[i]);root->left = build(s, ++i);root->right = build(s, ++i);return root;
}
vector<char>t;
void travel(TreeNode* root)
{if (root){travel(root->left);t.push_back(root->val);travel(root->right);}
}int main()
{string s; cin >> s;int i = 0;TreeNode* root = build(s, i);travel(root);for (int i = 0; i < t.size(); i++){cout << t[i] << " ";}
}

7-2 前序序列创建二叉树相关推荐

  1. 数据结构与算法实验 实验6:二叉树ADT的二叉链式实现 (由完全前序序列创建二叉树 / 求二叉树的节点数/树高/叶子节点数 /先序中序后序层序遍历)

    假设二叉数的数据元素为字符,采用二叉链式存储结构.请编码实现二叉树ADT,其中包括创建二叉树.遍历二叉树(深度.广度).求二叉树的深度(高度).计算二叉树的元素个数.计算二叉树的叶子数.二叉树的格式输 ...

  2. 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)

    7-10 先序序列创建二叉树,输出先序序列.中序序列.后序序列并输出叶子结点数 (10 分) 对于给定的二叉树,输出其先序序列.中序序列.后序序列并输出叶子结点数. 输入格式: 二叉树的先序遍历序列. ...

  3. 由标明空子树的先序遍历序列创建二叉树

    由标明空子树的先序遍历序列创建二叉树 i=0 def createBiTree2(preOrder): # i为常数0 global i c = preOrder[i] # 取字符 if c != ' ...

  4. 按照前序遍历创建二叉树及树的四种遍历方式

    一.二叉树的介绍 二叉树的特点是二叉树的每个结点的度都不大于2,可以视为每个结点都有左孩子和右孩子.故二叉树结点的数据结构为 二.二叉树的特点 1.设根结点所在的层数为第1层,则第i层最多有个结点. ...

  5. 扩展二叉树的中序序列创建二叉树?

    一.前言 我们都知道,任意一棵二叉树的前序序列.中序序列.后序序列都是唯一的.但是,反过来是否唯一对应呢?

  6. 先根序列创建二叉树c语言,用C语言创建二叉树并先序遍历.doc

    用C语言创建二叉树并先序遍历 用C语言创建二叉树并 #include "stdio.h" #include "stdlib.h" typedef struct ...

  7. 根据先序序列和中序,后序和中序序列创建二叉树

    思考:如何才能确定一棵树? 结论:    通过中序遍历和先序遍历可以确定一个树                 通过中序遍历和后续遍历可以确定一个树 通过先序遍历和后序遍历确定不了一个树. 算法实现: ...

  8. 按照层次序列创建二叉树,并判断二叉树是否为二叉搜索树

    首先定义树节点的数据结构,如下: struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; }; 两个函数,用 ...

  9. 天梯选拔:先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数

    思路分析: 这道题考察二叉树的建立以及二叉树的前序遍历.中序遍历和后序遍历.首先按照先序建立二叉树.在这期间需要先建立一个结构体,包括当前节点的值,以及它的左儿子和右儿子.注意这里不能直接存左儿子和右 ...

  10. 利用二叉树先序遍历序列创建二叉树的算法

    根据C语言数据结构第六版课本算法5.3 void CreateBiTree(BiTree &T) { //算法5.3 按先序遍历输入二叉树中的节点的值//构造二叉链表表示的二叉树TTElemT ...

最新文章

  1. java foreach delete_Java CopyOnWriteArrayList forEach()用法及代码示例
  2. hdoj1087 (DP--LIS)
  3. linux文件历史,Linux文件系统的历史透视
  4. java jediscluster_方便jediscluster操作的工具类
  5. 19个强大、有趣、又好玩的 Linux 命令!
  6. 2015蓝桥杯C++A:牌型种数(分配问题)
  7. Java开发利器Eclipse和IDEA
  8. uniapp点击复制文本
  9. USB TYPE A B C 引脚定义
  10. Vue项目实战05:18n实现多语言自动切换-浏览器语言设置
  11. CH341应用升级为CH347软硬件注意事项
  12. 工作前5年决定你一生的财富
  13. keepAlive和activated
  14. 贷记、借记、来帐、往账的区别
  15. 淘宝SEO优化提高流量的绝密办法
  16. http status 400,http 400,400 错误
  17. 【Android】Android入门
  18. UCOSii和Linux的区别和联系
  19. rust纯黑_《黑色沙漠》极致颜艺 黑丝美腿蠢萌搞怪任你捏
  20. jvarkit包问题反馈:构建成功,部分方法测试失败第1类错误分析

热门文章

  1. java 动态 Lambda (二)
  2. 情景分析是什么?我们该如何去理解这个概念?
  3. tiny4412 uboot 2020.10版本移植(三)——uboot初步启动
  4. win10安装时有个修复计算机,电脑开机提示自动修复怎么办?win10电脑开机提示自动修复教程...
  5. Appium连接夜神模拟器
  6. 最小的单片机:ATtiny85
  7. 【CSS】flex布局平分三等分中间间距相等且两端对齐
  8. 关于绝对路径与相对路径(详细)
  9. 【论文解读 KDD 2018 | PME】PME: Projected Metric Embedding on Heterogeneous Networks for Link Prediction
  10. 初识Python必看基础知识~ 续(6)九层之台,起于垒土,肝肝肝~