ZZULI 1208  二叉树(1)

本文介绍了如何通过扩展的先序序列构建二叉树,并输出其先序、中序和后序遍历序列。重点在于理解二叉树的遍历方法及其在计算机科学中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉树(1)

Time Limit:1000MS  Memory Limit:65536K
Total Submit:189 Accepted:77

Description

1、 按扩展的先序序列(即包括空结点)输入二叉树的各结点,建立二叉树,并输出其先序、中序和后序遍历序列。

ZZULI <wbr>1208 <wbr> <wbr>二叉树(1)

如图所示的二叉树的扩展的先序序列为:ABD111C E11F11(1代表空结点)

Input

输入有多组例子,每组数组占一行;

Output

输出对应的结果,每组结果占三行。

Sample Input

ABD111CE11F11

Sample Output

ABDCEF
DBAECF
DBEFCA

Source

李老师

二叉树经典题目,扩展的先序遍历有个特征,就是没遇到空节点时可以从数组中看出来,这样遇到空节点时就可以判定该节点已经走到最后一步了,因此退出该节点,返回上一层(即build()中的return;),这样依次建立左节点,右节点……

先序遍历、中序遍历和后序遍历就不用说了,这个是经典中的经典,百度一下,遍地都是写的比我好的代码。

代码如下:

#include<stdio.h>
#include<stdlib.h>
char str[1001];
int top;
typedef struct tree{
    char data;
    struct tree *left,*right;
}node,*Lnode;
int m=sizeof(node);
Lnode newnode()
{
    Lnode p;
    p=(Lnode)malloc(m);
    p->left=NULL;
    p->right=NULL;
    return p;
}
void build(Lnode p)
{
    Lnode s,q;
    if(str[top]=='1'||str[top]==0){
        p->data='1';
        return;
    }
    else {
        p->data=str[top];
        s=newnode();
        p->left=s;
        top++;
        build(s);
    }
    q=newnode();
    p->right=q;
    top++;
    build(q);
}
void pre(Lnode p)
{
    if(p==NULL)return;
    if(p->data!='1')
    printf("%c",p->data);
    pre(p->left);
    pre(p->right);
}
void mid(Lnode p)
{
    if(p==NULL)return;
    mid(p->left);
    if(p->data!='1')
    printf("%c",p->data);
    mid(p->right);
}
void aft(Lnode p)
{
    if(p==NULL)return;
    aft(p->left);
    aft(p->right);
    if(p->data!='1')
    printf("%c",p->data);
}
int main()
{
    Lnode root;
    while(gets(str))
    {
        top=0;
        root=newnode();
        build(root);
        pre(root);
        printf("\n");
        mid(root);
        printf("\n");
        aft(root);
        printf("\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值