程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> struct-C語言二叉樹問題,輸入之後沒有反應。

struct-C語言二叉樹問題,輸入之後沒有反應。

編輯:編程解疑
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@@。
輸入之後並沒有什麼反應,並非機子的問題。
除了輸入的問題,是不是還有其他的問題在呢?比如說其他版塊是不是出錯了呢?
煩請指教。

最佳回答:


你的輸入不對。
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;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved