【例3-5】扩展二叉树

【例3-5】扩展二叉树

链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1340
时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

由于先序、中序和后序序列中的任一个都不能唯一确定一棵二叉树,所以对二叉树做如下处理,将二叉树的空结点用·补齐,如图所示。我们把这样处理后的二叉树称为原二叉树的扩展二叉树,扩展二叉树的先序和后序序列能唯一确定其二叉树。

现给出扩展二叉树的先序序列,要求输出其中序和后序序列。

【输入】

扩展二叉树的先序序列。

【输出】

输出其中序和后序序列。

【输入样例】

ABD..EF..G..C..

【输出样例】

DBFEGAC
DFGEBCA
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
typedef struct node;
typedef node *tree;
struct node{
    char data;
    tree l,r,f;
};
tree bt;
int i=-1;
string s;
void build(tree &bt)
{

    if(s[++i]!=‘.‘)
    {
        bt=new node;
        bt->data=s[i];

        build(bt->l);
        build(bt->r);

    }
    else bt=NULL;
}
void post(tree bt)
{
    if(bt)
    {
        post(bt->l);
        post(bt->r);
        cout<<bt->data;
    }
}
void mid(tree bt)
{
    if(bt)
    {
        mid(bt->l);
        cout<<bt->data;
        mid(bt->r);

    }
}
int main()
{

    cin>>s;

    build(bt);
    mid(bt);
    cout<<endl;
    post(bt);
    cout<<endl;

}
时间: 2024-10-12 23:29:20

【例3-5】扩展二叉树的相关文章

扩展二叉树

扩展二叉树 一.心得 二.题目及分析 给定扩展二叉树的先序序列,求二叉树的中序和后序序列 输入ABD..EF..G..C..输出dbfegacdfgebca 三.代码及结果 1 //扩展二叉树 2 #include <iostream> 3 #include <string> 4 using namespace std; 5 6 string s="ABD..EF..G..C.."; 7 int m=-1; 8 9 typedef struct node{ 10

12.遍历二叉树与二叉树的建立

一.遍历二叉树 1.定义 二叉树的遍历(travering binary tree)是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次. 2.前序遍历 (1)规则:若二叉树为空,则空操作返回.否则,先访问根结点,然后前序遍历左子树,再前序遍历右子树. (2)实例 前序遍历结果为:A BDGH CEIF 分析:当最先访问根结点后,然后前序遍历左子树.当访问根的左子树时,这里"前序遍历"即我们将B假设为左子树的根来遍历. (3)算法 从二叉树定义

查找二叉树

[问题描述] 已知一棵二叉树用邻接表结构存储,中序查找二叉树中值为x的结点,并指出是第几个结点.例:如图二叉树的数据文件的数据格式如下 7 15 5 2 3 12 4 5 10 0 0 29 0 0 15 6 7 8 0 0 23 0 0 •‘ 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 struct node 6 { 7 int parent;

设计模式的征途—1.单例(Singleton)模式

单例模式属于创建型模式的一种,创建型模式是一类最常用的设计模式,在软件开发中应用非常广泛.创建型模式将对象的创建和使用分离,在使用对象时无需关心对象的创建细节,从而降低系统的耦合度,让设计方案更易于修改和扩展.每一个创建型模式都在视图回答3个问题:3W -> 创建什么(What).由谁创建(Who)和何时创建(When). 本篇是创建型模式的第一篇,也是最简单的一个设计模式,虽然简单,但是其使用频率确是很高的. 单例模式(Singleton) 学习难度:★☆☆☆☆ 使用频率:★★★★☆ 一.单例

树(二叉树)的建立和遍历算法(一)(前序,中序,后序)

最近学习树的概念,有关二叉树的实现算法记录下来... 不过学习之前要了解的预备知识:树的概念:二叉树的存储结构:二叉树的遍历方法.. 二叉树的存储结构主要了解二叉链表结构,也就是一个数据域,两个指针域,(分别为指向左右孩子的指针),从下面程序1,二叉树的存储结构可以看出. 二叉树的遍历方法:主要有前序遍历,中序遍历,后序遍历,层序遍历.(层序遍历下一篇再讲,本篇主要讲的递归法) 如这样一个二叉树: 它的前序遍历顺序为:ABDGHCEIF(规则是先是根结点,再前序遍历左子树,再前序遍历右子树) 它

UML-用例

用例是什么?在什么场景下该使用用例,用例又在软件建模中扮演着什么样的角色呢?用例简单的理解就是用户与系统交互能做一些什么事情,用例只是描述出他能做什么,而不是他该怎么样去做.一般在软件前期进行用户需求分析.捕获需求扮演着重要的角色.以图形化表示法,可以更加深动而形象展现用户的功能需求,易于用户理解.通过引导用户理解用例的,以用例方式来驱动着整个需求分析过程.如果在需求分析过程中使用得当,他将是你需求分析过程中的一把利器,个人还是比较推崇UML建模方式来分析设计.当然有的人不用建模工具也能写好文档

Java数据结构-二叉树及其遍历

二叉树的定义:n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互相不相交的.分别称为根结点的左子树和右子树的二叉树组成. 二叉树的特点: 0<=度<=2: 左右子树是有顺序的,不能颠倒: 不论有几棵子树,也要区分它是左子树还是右子树. 二叉树的五种基本形态: 空二叉树: 只有一个根结点: 根结点只有左子树: 根结点只有右子树: 根结点既有左子树又有右子树. 举例3个结点的二叉树的形态有: 下面说一些特殊的二叉树. 斜树:所有的结点都只有左子树的二叉

用例图中的三种关系包含、扩展、泛化

用例图使用户 与开发人员交流的一种重要的方式,是对用户需求的一种描述.开发人员从用户的角度整体上理解系统的功能. 用例图主要有三种元素:参与者(Actor),用例,以及用例图中对象间到的关系.其中关系有包含.扩展是用例图中特有的,泛化在其他类图中同样存在. 包含:当可以从两个或两个以上的用例中提取公共行为时,应该使用包含的关系来表示它们.其中这个提取出来的公共用例成为抽象用例,而把原始用例成为基本用例或基础用例.其中"<<include>>"是包含关系的构造型,

递归建立二叉树

转载:递归建立二叉树 假设二叉树为: a b                 c d                 e 因为程序中要知道叶子结点(终点),所以要将上面的二叉树变成扩展二叉树 (把叶子结点的孩子补成#, 用作标记),  扩展后就变成了: a b                    c #        d          #       e #    #             #    # 那么,在输入的时候,需要输入: ab#d##C#e##      (注意,输入后,按