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

本文介绍如何根据给定的先序序列构建二叉树,并实现中序与后序遍历。此外,还提供了计算叶子节点数量及二叉树深度的方法。

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

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

Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
       已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。

Input
  输入一个长度小于50个字符的字符串。
Output
输出共有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
Example Input
abc,,de,g,,f,,,
Example Output
cbegdfacgefdba35
#include<stdio.h>
using namespace std;
char ch[60],*p;
struct node
{
    char data;
    node *lt,*rt;
};

node *creat(char *&xx)
 {
     if(*xx=='\0')
        return NULL;
     if(*xx==',')
     {
         xx++;
         return NULL;
     }
     node *r=new node;
     r->data=*xx++;
     r->lt=creat(xx);
     r->rt=creat(xx);
     return r;
 }
 void mout(node *r)
{
    if(r==NULL)
        return ;
    mout(r->lt);
    printf("%c",r->data);
    mout(r->rt);
}

void hout(node *r)
{
    if(r==NULL)
        return ;
    hout(r->lt);
    hout(r->rt);
    printf("%c",r->data);
}
int yezi(node *root,int &k)
{
    if(root)
    {
         if(root->lt==NULL&&root->rt==NULL)
       k++;
        yezi(root->lt,k);
        yezi(root->rt,k);
    }
    return k;



}
int depth(node *root)
{
    int deep=0;
    if(root)
    {
        int l=depth(root->lt);
        int r=depth(root->rt);
        deep=l>=r?l+1:r+1;
    }
    return deep;
}
int main()
{
    node *root;
    scanf("%s",ch);
    p=ch;   
    root=creat(p);
    mout(root);
    printf("\n");
    hout(root);
    printf("\n");
    int k=0;
    printf("%d\n",yezi(root,k));

     printf("%d\n",depth(root));
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值