ZZULI 1209  二叉树(2)

本文介绍了一种通过扩展的先序序列构建二叉树的方法,并实现了计算树的高度及输出所有叶子节点的功能。提供了完整的C语言代码实现,适合初学者理解和实践二叉树的相关操作。

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

二叉树(2)

Time Limit:1000MS  Memory Limit:65536K
Total Submit:69 Accepted:29

Description

1、 按扩展的先序序列(即包括空结点,1表示空结点)输入二叉树的各结点,建立二叉树,

ZZULI <wbr>1209 <wbr> <wbr>二叉树(2)

输出包括两行,第一行为该二叉树的高度,第二行按自左至右的顺序输出所有叶子结点,各字符后有一空格

Input

输入有多组实例,每组实例占一行

Output

每组结果占两行,第一行为该二叉树的高度,第二行按自左至右的顺序输出所有叶子结点,各字符后有一空格

Sample Input

ABD111CE11F11

Sample Output

3
D E F

Source

李老师

这个题目和1208非常相像,只是略有不同而已,判断高度的就不用再说了,定义一个全局变量,有更深的则记下,最后就是节点的深度了,

而输出叶子的则比较麻烦,一直没能想出来一个可以和求节点深度一起求解的方法,所以只能,另外又开了一个函数,有点儿浪费时间,唉,浪费时间就是浪费生命啊!

代码:

#include<stdio.h>
#include<stdlib.h>
char str[1001];
int flag[1001];
int top,max;
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 look(Lnode p,int i)
{
    if(p->data!='1')
    {
        i++;
        if(max<i)
            max=i;
        if(p->left->data=='1'&&p->right->data=='1')
            str[top++]=p->data;
    }
    else return;
    look(p->left,i);
    look(p->right,i);
}
int main()
{
    Lnode root;
    int i;
    while(gets(str))
    {
        top=0;
        root=newnode();
        build(root);
        max=0;top=0;
        look(root,0);
        printf("%d\n%c",max,str[0]);
        for(i=1;i<top;i++)
            printf(" %c",str[i]);
        printf("\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值