/*
Created by justin on 2/3/24.
Contact me by gejianming@buaa.edu.cn
*/
#include "stdlib.h"
#include "stdio.h"
typedef struct TreeNode {
char data;
struct TreeNode *lchild;
struct TreeNode *rchild;
} TreeNode;
void createTree(TreeNode **T, char *data, int *index) {
/* *
* 为什么要用二级指针,因为TreeNode 本身就是指针,我们要在函数内部改变其指向
* 同理 index,我们要记录全局index,也就是在函数内部记录index,所以用指针接收,可以在函数内部改变其值
* char * data 本身就是一个连续地址的内存,用来放置字符串
*
* */
char ch;
ch = data[*index];
// 全局变量
*index += 1;
if (ch == '#') {
*T = NULL;
} else {
*T = (TreeNode *) malloc(sizeof(TreeNode));
(*T)->data = ch;
createTree(&((*T)->lchild), data, index);
createTree(&((*T)->rchild), data, index);
}
}
void preOrder(TreeNode *T) {
if (T == NULL) {
return;
} else {
printf("%c", T->data);
preOrder(T->lchild);
preOrder(T->rchild);
}
}
void inOrder(TreeNode *T) {
if (T == NULL) {
return;
} else {
inOrder(T->lchild);
printf("%c", T->data);
inOrder(T->rchild);
}
}
void postOrder(TreeNode *T) {
if (T == NULL) {
return;
} else {
postOrder(T->lchild);
printf("%c", T->data);
postOrder(T->rchild);
}
}
int main(int argc, char *argv[]) {
TreeNode *T;
int index = 0;
createTree(&T, "AB##C##", &index);
preOrder(T);
printf("\n");
inOrder(T);
printf("\n");
postOrder(T);
return 0;
}
注意点: if (ch == ‘#’) {
*T = NULL;
}
这里的’#'必须用单引号包裹,‘’是代表字符,而双引号代表字符串