2016-11-29 46 views
-4

這段代碼是關於二叉樹的。 它可以很好地工作。 但是在我按下回車鍵,並得到正確的答案,原來停止working.WHY This is the answer 源代碼:關於二叉樹的東西

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

typedef struct BiTNode 
{ 
    char data; 
    struct BiTNode* rchild; 
    struct BiTNode* lchild; 
}BiTNode; 
typedef BiTNode* BiTree; 
int CreateBiTree(BiTree *T); 
void Visit(BiTree T); 
void PreOrder(BiTree T); 
void InOrder(BiTree T); 
void PostOrder(BiTree T); 

int main(void) 
{ 
    BiTree T; 
    CreateBiTree(&T); 
    PreOrder(T); 
    return 0; 
} 

int CreateBiTree(BiTree *T) 
{ 
    char data; 
    scanf("%c",&data); 
    if(data=='#') 
    { 
     *T==NULL; 
    } 
    else 
    { 
     *T=(BiTree)malloc(sizeof(BiTNode)); 
     (*T)->data=data; 
     CreateBiTree(&(*T)->lchild); 
     CreateBiTree(&(*T)->rchild); 
    } 
    return 0; 
} 

void Visit(BiTree T) 
{ 
     printf("%c",T); 
} 

void PreOrder(BiTree T) 
{ 
    if(T!=NULL) 
    { 
     Visit(T); 
     PreOrder(T->lchild); 
     PreOrder(T->rchild); 
    } 
} 
+1

您如何看待聲明'* T == NULL;'會做什麼? –

+2

請編輯您的問題以提供[mcve]以及*清楚的問題陳述*。 –

回答

1

在你的代碼有很多問題: - ?

  1. 在CreateBiTree(BiTree * T)函數中,您只修改root,rchild和lchild的單個指針。你應該在這個函數中本地定義Bitree * T。
  2. 什麼是* T == NULL?你正在初始化或比較?
  3. scanf(「%c」,& data);這種說法也會在字符大小寫的情況下產生問題。這個聲明也會等待'\ n'。所以你應該寫scanf(「%c」,&數據)。 * T =(BiTree)malloc(sizeof(BiTNode));其中,這個語句也是錯誤的,malloc返回指針,所以你應該做正確的類型轉換。 * T =(BiTree *)malloc(sizeof(BiTNode));

我已經修改你的源代碼,供大家參考,有看

//it can work 
#include<stdio.h> 
#include<stdlib.h> 
using namespace std; 
typedef struct BiTNode 
{ 
    char data; 
    struct BiTNode* rchild; 
    struct BiTNode* lchild; 
}BiTNode; 
typedef BiTNode BiTree; 
BiTree *CreateBiTree(); 
void Visit(BiTree **T); 
void PreOrder(BiTree *T); 
void InOrder(BiTree T); 
void PostOrder(BiTree T); 
int main(void) 
{ 
    BiTree *T; 
    T=CreateBiTree(); 
    PreOrder(T); 
    return 0; 
} 
BiTree *CreateBiTree() 
{ 
    BiTree *T; 
    char data; 
    scanf(" %c",&data); 
     printf("............%c\n",data); 

    if(data=='#') 
     return NULL; 

    T=(BiTree *)malloc(sizeof(BiTree)); 
    T->data=data; 

    printf("Enter left child of %c:\n",data); 
    T->lchild=CreateBiTree(); 

    printf("Enter right child of %c:\n",data); 
    T->rchild=CreateBiTree(); 

    return T; 
} 
void Visit(BiTree **T) 
{ 
     printf("%c",(*T)->data); 
} 
void PreOrder(BiTree *T) 
{ 
    if(T!=NULL) 
    { 
     Visit(&T); 
     PreOrder(T->lchild); 
     PreOrder(T->rchild); 
    } 
} 
+0

謝謝百萬!!! – Bugmaker

+0

不用多說,謝謝。 –

+0

抱歉,但我想知道什麼是SCAND()?(我是一個beginer,學生在高中) – Bugmaker