树:关于树的遍历的几个方面

这篇博客探讨了二叉树的遍历方法,包括先序遍历输入序列来建立二叉树并统计叶子节点数量,以及利用前序和中序遍历来实现层次遍历。通过示例输入和输出,解释了如何解决这些问题。

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

数据结构实验之二叉树三:统计叶子数
Problem Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。

Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
输出二叉树的叶子结点个数。

Sample Input
abc,de,g,f,
Sample Output
3

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int count;
struct node
{
    char data;
    struct node*l,*r;
};
int li;
char a[101];
struct node* c( )
{
    char b=a[li++];
    struct node *root;
    if(b==',') root=NULL;
    else
    {
        root=(struct node*)malloc(sizeof(struct node));
        root->data=b;
        root->l=c();
        root->r=c();

    }
    return root;
}
int  leave(struct node*root)
{

    if(root)//前序遍历
    {
        if(root->l==NULL&&root->r==NULL) count++;
        leave(root->l);
        leave(root->r);


    }
    return count;
}
int main()
{
    while(gets(a))
    {
        li=0;
        struct node*root;
        root=c( );
        count=0;
        printf("%d\n",leave(root));

    }
    return 0;
}

求二叉树的层次遍历
Problem Description
已知一颗二叉树的前序遍历和中序遍历,求二叉树的层次遍历。

Input
输入数据有多组,输入T,代表有T组测试数据。每组数据有两个长度小于50的字符串,第一个字符串为前序遍历,第二个为中序遍历。
Output
每组输出这颗二叉树的层次遍历。

Sample Input
2
abc
bac
abdec
dbeac
Sample Output
abc
abcde

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
    char data;
    struct node*l,*r;
};
struct node*c(char x[],char z[],int n)
{
    struct node *root;
    int i;
    if(n<=0) return NULL;
    root=(struct node*)malloc(sizeof(struct node));
    root->data=x[0];
    for(i=0; i<n; i++)
        if(z[i]==x[0]) break;
    root->l=c(x+1,z,i);
    root->r=c(x+i+1,z+i+1,n-i-1);
    return root;


}
int level(struct node*root,int i)//i表示第几层
{
    if(!root) return 0;
    if(i==1)//表明是树根
    {
        printf("%c",root->data);
        return 1;

    }
    else  return level(root->l,i-1)+level(root->r,i-1);

}
int main()
{
    int t;
    char a[55],b[55];
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%s%s",a,b);
        n=strlen(a);
        struct node*root;
        root=c(a,b,n);
        int i;
        for(i=1; ; i++)
            if(level(root,i)==0) break;//表明已遍历完
        printf("\n");
    }

    return 0;
}





数据结构实验之二叉树的建立与遍历

数据结构实验之二叉树七:叶子问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值