PTA 7-1 顺序存储的前序遍历 (20 分)

7-1 顺序存储的前序遍历 (20 分)

给你一个采用顺序存储结构的非空二叉树,请你设计一个算法求出它的前序遍历。
输入格式:

输入数据有多组,每组的第一行为一个正数n,表示该二叉树的节点个数。 接下来有n个字符,表示各个位置上的元素,当字符为'#'时表示当前节点为空。
输出格式:

输出该二叉树的前序遍历
输入样例:

在这里给出一组输入。例如:

6
ABCDEF
6
ABC#DE
结尾无空行

输出样例:

在这里给出相应的输出。例如:

ABDECF
ABDCE
#include<stdio.h>
#include<stdlib.h>
typedef char Sptree[1000];
//创建一个二叉树
void creat(Sptree tree,int n)
{
    int i=1;
    char a;
    while(i<=n){
        scanf("%c",&a);
        tree[i]=a;
        i++;
    }
}
void print(Sptree tree,int i,int n)
{
    if(tree[i]!='#')
    {
        printf("%c",tree[i]);
    }
    //左节点
     if(2*i<=n)
    {
        print(tree,2*i,n);
    }
    //右节点
    if(2*i+1<=n)
    {
        print(tree,2*i+1,n);
    }
}
int main(void)
{
    int n;
    while(~scanf("%d",&n)){
        Sptree tree;
        getchar();
        creat(tree,n);
        int i=1;
        print(tree,i,n);
        printf("\n");
    }
    return 0;
}

 注释:在这里说明一下,顺序存储相当于数组,也就是说可以将二叉树可以用数组来表示,顺序二叉树只考虑完全二叉树,第n个节点的左叶子节点为2*n+1,右叶子节点为2*n+2;父亲节点为(n-1)/2,n表示从第几个节点开始。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值