#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct Node { char data; struct Node* LChild; struct Node* RChild; } BiTNode, * BiTree; void InitList(BiTree* l) { *l = (BiTree)malloc(sizeof(BiTNode)); (*l)->LChild = NULL; (*l)->RChild = NULL; } void CreateBiTree(BiTree* bt) { char ch; ch = getchar(); if (ch == ' ') *bt = NULL; else { *bt = (BiTree)malloc(sizeof(BiTNode)); (*bt)->data = ch; CreateBiTree(&((*bt)->LChild)); CreateBiTree(&((*bt)->RChild)); } } void PreOrder(BiTree root)//先序遍历 { if (root != NULL) { printf("%c", root->data); PreOrder(root->LChild); PreOrder(root->RChild); } } void InOrder(BiTree root)//中序遍历 { if (root != NULL) { InOrder(root->LChild); printf("%c", root->data); InOrder(root->RChild); } } void PostOrder(BiTree root)//后序遍历 { if (root != NULL) { PostOrder(root->LChild); PostOrder(root->RChild); printf("%c", root->data); } } int main() { BiTree bt; InitList(&bt); CreateBiTree(&bt); PreOrder(bt); printf("\n"); InOrder(bt); printf("\n"); PostOrder(bt); printf("\n"); system("pause"); }修改
时间: 2024-04-02 20:35:35 浏览: 97
以下是修改后的代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Node {
char data;
struct Node* LChild;
struct Node* RChild;
} BiTNode, * BiTree;
void InitTree(BiTree* T) {
*T = NULL;
}
void CreateBiTree(BiTree* T) {
char ch;
scanf("%c", &ch);
if (ch == ' ') {
*T = NULL;
}
else {
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = ch;
CreateBiTree(&((*T)->LChild));
CreateBiTree(&((*T)->RChild));
}
}
void PreOrder(BiTree T) //先序遍历
{
if (T != NULL) {
printf("%c", T->data);
PreOrder(T->LChild);
PreOrder(T->RChild);
}
}
void InOrder(BiTree T) //中序遍历
{
if (T != NULL) {
InOrder(T->LChild);
printf("%c", T->data);
InOrder(T->RChild);
}
}
void PostOrder(BiTree T) //后序遍历
{
if (T != NULL) {
PostOrder(T->LChild);
PostOrder(T->RChild);
printf("%c", T->data);
}
}
int main() {
BiTree T;
InitTree(&T);
CreateBiTree(&T);
PreOrder(T);
printf("\n");
InOrder(T);
printf("\n");
PostOrder(T);
printf("\n");
return 0;
}
主要修改如下:
1. InitList 改为 InitTree,因为我们是在初始化一棵树。
2. getchar() 改为 scanf("%c", &ch),因为 getchar() 会读取缓冲区的字符,可能会导致输入不完整。
3. main 函数需要加上 return 0;。
另外,建议在 CreateBiTree 函数中加上 fflush(stdin); 语句,以清除输入缓冲区中的多余字符。
阅读全文