十二集
2016-11-22 16:47
采纳率: 66.7%
浏览 1.3k
已采纳

C语言二叉树问题,输入之后没有反应。

#include
#include
#include //head file

typedef struct BiNode{
char data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;//data and stucture
void InitBiTree(BiTree T){
T=NULL;//input
}

void Create(BiTree &T)
{
char ch[2];
scanf("%s",&ch[0]);
if(strcmp(ch,"@")==0) {
T=NULL;
}else{
T=(BiTree)malloc(sizeof(BiNode));
T->data=ch[0];
Create(T->lchild);
Create(T->rchild);
}
}

void visit(char c){
printf("%c",c);
}

void PreOrderTraverse(BiTree T){
if(T){
visit(T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}

void InOrderTraverse(BiTree T){
if(T){
InOrderTraverse(T->lchild);
visit(T->data);
InOrderTraverse(T->rchild);
}
}

void PostOrderTraverse(BiTree T){
if(T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
visit(T->data);
}
}

int depth(BiTree T){
int ldeep,rdeep;
if(!T) return 0;
else{
ldeep=depth(T->lchild);
rdeep=depth(T->rchild);
return ldeep>rdeep?ldeep:rdeep+1;
}
}

int main(){
BiTree T;
int deep;
InitBiTree(T);
printf("请输入序列\n");
Create(T);
deep=depth(T);
printf("\n深度:%d\n二叉树构建完毕",deep);
printf("\n先序遍历二叉树:");
PreOrderTraverse(T);
printf("\n中序遍历二叉树:");
InOrderTraverse(T);
printf("\n后序遍历二叉树:");
PostOrderTraverse(T);
return 0;
}
这个建立二叉树的输入语句哪里不对嘛?输入的内容是12@@3@@。
输入之后并没有什么反应,并非机子的问题。
除了输入的问题,是不是还有其他的问题在呢?比如说其他版块是不是出错了呢?
烦请指教。

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 小灸舞 2016-11-23 08:46
    已采纳

    你的输入不对。
    scanf("%s",&ch[0]);应该改成scanf("%1s",&ch[0]);才行
    图片说明

     #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>//head file
    
    typedef struct BiNode{
        char data;
        struct BiNode *lchild, *rchild;
    }BiTNode, *BiTree;//data and stucture
    void InitBiTree(BiTree &T){
        T = NULL;//input
    }
    
    void Create(BiTree &T)
    {
        char ch[2];
        scanf("%1s", &ch[0]);
        if (strcmp(ch, "@") == 0) {
            T = NULL;
        }
        else{
            T = (BiTree)malloc(sizeof(BiNode));
            T->data = ch[0];
            Create(T->lchild);
            Create(T->rchild);
        }
    }
    
    void visit(char c){
        printf("%c", c);
    }
    
    void PreOrderTraverse(BiTree T){
        if (T){
            visit(T->data);
            PreOrderTraverse(T->lchild);
            PreOrderTraverse(T->rchild);
        }
    }
    
    void InOrderTraverse(BiTree T){
        if (T){
            InOrderTraverse(T->lchild);
            visit(T->data);
            InOrderTraverse(T->rchild);
        }
    }
    
    void PostOrderTraverse(BiTree T){
        if (T){
            PostOrderTraverse(T->lchild);
            PostOrderTraverse(T->rchild);
            visit(T->data);
        }
    }
    
    int depth(BiTree T){
        int ldeep, rdeep;
        if (!T) return 0;
        else{
            ldeep = depth(T->lchild);
            rdeep = depth(T->rchild);
            return ldeep>rdeep ? ldeep : rdeep + 1;
        }
    }
    
    int main(){
        BiTree T;
        int deep;
        InitBiTree(T);
        printf("请输入序列\n");
        Create(T);
        deep = depth(T);
        printf("\n深度:%d\n二叉树构建完毕", deep);
        printf("\n先序遍历二叉树:");
        PreOrderTraverse(T);
        printf("\n中序遍历二叉树:");
        InOrderTraverse(T);
        printf("\n后序遍历二叉树:");
        PostOrderTraverse(T);
        return 0;
    }
    
    已采纳该答案
    评论
    解决 2 无用
    打赏 举报

相关推荐 更多相似问题