#include <stdio.h> #include"stdlib.h" typedef struct CreatBTtree { char date; struct CreatBTtree* left_ch; struct CreatBTtree* right_ch; }CreatBTree, *BT; void CreatBT(BT*T) { //BT P=T; //*T = (BT)malloc(sizeof(CreatBTree)); char s; if(*T!=NULL) scanf_s("%c", &s); getchar(); if (s != '#') { *T = (BT)malloc(sizeof(CreatBTree)); (*T)->date = s; printf("请输入%c左孩子",s); CreatBT(&((*T)->left_ch)); printf("请输入%c右孩子",s); CreatBT(&((*T)->right_ch)); } if(s=='#') return 0; } void XianXu(BT T) { if (T == NULL) { return ; } else printf("%c", T->date); XianXu(T->left_ch); XianXu(T->right_ch); } int main() { printf("请输入根节点:"); BT T; CreatBT(&T); printf("二叉树创建成功!\n"); // printf("%c", T->date); printf("先序遍历的结果:"); XianXu(T); return 0; }修改代码
时间: 2023-12-29 22:03:34 浏览: 52
mysql的udf编程之非阻塞超时重传
以下是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct CreatBTtree {
char data;
struct CreatBTtree* left_ch;
struct CreatBTtree* right_ch;
} CreatBTree, *BT;
void CreatBT(BT* T) {
char s;
scanf("%c", &s);
getchar(); // 处理输入缓冲区中的回车符
if (s == '#') {
*T = NULL;
} else {
*T = (BT)malloc(sizeof(CreatBTree));
(*T)->data = s;
printf("请输入%c左孩子:", s);
CreatBT(&((*T)->left_ch));
printf("请输入%c右孩子:", s);
CreatBT(&((*T)->right_ch));
}
}
void XianXu(BT T) {
if (T == NULL) {
return;
}
printf("%c ", T->data);
XianXu(T->left_ch);
XianXu(T->right_ch);
}
int main() {
printf("请输入根节点:");
BT T;
CreatBT(&T);
printf("二叉树创建成功!\n");
printf("先序遍历结果:");
XianXu(T);
return 0;
}
```
修改说明:
1. `#include"stdlib.h"` 库名应该是 `<stdlib.h>`,改为正确的库名。
2. 在 `CreatBT` 函数中,当 `*T` 不为 `NULL` 时,应先读入一个字符,然后再处理创建左右子树的逻辑。
3. 在 `CreatBT` 函数中,当读入的字符为 `#` 时,应该将 `*T` 赋为 `NULL`。
4. 在 `XianXu` 函数中,输出节点值后应该加一个空格,以便区分不同的节点。
5. 在 `main` 函数中,输出先序遍历结果时应该加一个空格,以便区分不同的节点。
阅读全文