二叉树程序的问题是运行时出现错误

在小数据测试的时候输出是正确的,但有些数据可能过不了。分别以DLR,LDR,LRD遍历二叉树,同时输出叶子节点以及树的深度。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 10010

int LeafCount;

char s[MAX];
int pos;

typedef struct Node
{
    char ch;

    struct Node *LChild;
    struct Node *RChild;

}BitNode,*BitTree;

void CreateBiTree(BitTree *tree)
{
    if(s[pos]=='$' || s[pos]=='\0')
    {
        (*tree)=NULL;
        pos++;
    }
    
    else
    {
        (*tree)=(BitNode *)malloc(sizeof(BitNode));

        if((*tree)!=NULL)
        {
            (*tree)->ch=s[pos];
            pos++;

            CreateBiTree(&((*tree)->LChild));
            CreateBiTree(&((*tree)->RChild));
        }
    }
}

void Traverse_1(BitTree tree)
{
    if(tree!=NULL)
    {
        printf("%c",tree->ch);

        if(tree->LChild==NULL && tree->RChild==NULL)
        {
            LeafCount+=1;
        }

        Traverse_1(tree->LChild);
        Traverse_1(tree->RChild);
    }
}

void Traverse_2(BitTree tree)
{
    if(tree!=NULL)
    {
        Traverse_2(tree->LChild);
        printf("%c",tree->ch);
        Traverse_2(tree->RChild);
    }
}

void Traverse_3(BitTree tree)
{
    if(tree!=NULL)
    {
        Traverse_3(tree->LChild);
        Traverse_3(tree->RChild);

        printf("%c",tree->ch);
    }
}

int GetDepth(BitTree tree)
{
    int lh,rh,max;
    if(tree!=NULL)
    {
        lh=GetDepth(tree->LChild);
        rh=GetDepth(tree->RChild);

        max=lh>rh?lh:rh;
        
        return (max+1);
    }
    else
        return 0;
}

void DeleteTree(BitTree tree)
/* 释放双亲节点之前要先释放孩子节点 */
{
    if(tree==NULL)
    {
        return;
    }
    DeleteTree(tree->LChild);
    DeleteTree(tree->RChild);
    free(tree);
}

int main()
{
    BitTree bt;
    int depth;
    while(scanf("%s",s)!=EOF)
    {
        pos=0;
        if(strlen(s)==0)
            continue;
        if(1==strlen(s) && s[pos]=='$')
        {
            printf("0\n0\n\n");
        }
        else
        {
            LeafCount=0;

            CreateBiTree(&bt);

            Traverse_1(bt);
            printf("\n");

            Traverse_2(bt);
            printf("\n");

            Traverse_3(bt);
            printf("\n");

            depth=GetDepth(bt);
            printf("%d\n",depth);

            printf("%d\n",LeafCount);

            DeleteTree(bt);

            printf("\n");
        }
        
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值