ZXPoo 发表于 2022-12-2 15:37:11

这段代码在vs里运行不了,在devc++里可以运行是为啥?

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

typedef char bitreeElemType;
typedef struct BiNode                                        //定义二叉链表
{
        bitreeElemType data;
        BiNode* lchild, * rchild;
}BiNode,*BiTree;

int leaf = 0;

void pre_create_Bitree(BiTree* T);                        //先序创建二叉链表
void pre_traverse_Bitree(BiTree T);                        //先序遍历
void in_traverse_Bitree(BiTree T);                        //中序遍历
void post_traverse_Bitree(BiTree T);                //后序遍历
int Gethight_Bitree(BiTree T);                                //求高度
int Getleaf_Bitree(BiTree T);                                //求叶子数
void swap_Bitree(BiTree T);                                        //左右孩子交换


void pre_create_Bitree(BiTree* T)
{
        printf("请输入二叉树元素 \n");
        bitreeElemType e;
        scanf("%c", &e);
        if (e == '#')
                *T = NULL;
        else
        {
                *T = (BiTree)malloc(sizeof(BiNode));
                (*T)->data = e;
                pre_create_Bitree(&((*T)->lchild));
                pre_create_Bitree(&((*T)->rchild));
        }
}

void pre_traverse_Bitree(BiTree T)
{
        if (!T)
                return;
        printf("%c", T->data);
        pre_traverse_Bitree(T->lchild);
        pre_traverse_Bitree(T->rchild);
}

void in_traverse_Bitree(BiTree T)
{
        if (!T)
                return;
        in_traverse_Bitree(T->lchild);
        printf("%c", T->data);
        in_traverse_Bitree(T->rchild);
}

void post_traverse_Bitree(BiTree T)
{
        if (!T)
                return;
        post_traverse_Bitree(T->lchild);
        post_traverse_Bitree(T->rchild);
        printf("%c", T->data);
}

int Gethight_Bitree(BiTree T)
{
        if (!T)
                return 0;
        return Gethight_Bitree(T->lchild) > Gethight_Bitree(T->rchild) ? Gethight_Bitree(T->lchild) + 1
                                                                                                                                   : Gethight_Bitree(T->rchild) + 1;
}

int Getleaf_Bitree(BiTree T)
{
        if (!T)
                return 0;
        if (T->lchild == NULL && T->rchild == NULL)
                return ++leaf;
        Getleaf_Bitree(T->lchild);
        Getleaf_Bitree(T->rchild);
}

void swap_Bitree(BiTree T)
{
        if (!T)
                return;
        BiTree temp = (BiTree)malloc(sizeof(BiNode));
        temp = T->lchild;
        T->lchild = T->rchild;
        T->rchild = temp;
        swap_Bitree(T->lchild);
        swap_Bitree(T->rchild);
}

int main()
{
        BiTree T = NULL;
        pre_create_Bitree(&T);
        printf("先序遍历为: \n");
        pre_traverse_Bitree(T);
        printf("该树高度为: %d\n", Gethight_Bitree(T));
        printf("该树有%d个叶子\n", Getleaf_Bitree(T));
        swap_Bitree(T);
        printf("交换左右节点后先序遍历为: \n");
        pre_traverse_Bitree(T);

        return 0;
}

墨笠阳 发表于 2023-3-28 18:39:51

第27行,scanf("%c", &e);,改成,scanf_s("%c",&e,1);
       

页: [1]
查看完整版本: 这段代码在vs里运行不了,在devc++里可以运行是为啥?