《数据结构》C语言——二叉树的链式存储实现以及先序、中序、后序遍历的实现

#include
#include

typedef struct BinaryTreeNode{
	char data;
	struct BinaryTreeNode *lchild,*rchild;
}BinaryTreeNode,*BinTree;

void PreCreateBT(BinTree *t){
	char ch;
	ch = getchar();
	
	if(ch == '#')
		*t = NULL;
	else{
		*t = (BinTree)malloc(sizeof(BinaryTreeNode));
		(*t)->data = ch;
		printf("%c\n",(*t)->data);
		PreCreateBT(&(*t)->lchild);
		PreCreateBT(&(*t)->rchild);
	}
} 
//在这个地方我觉得需要好好理解结构型指针
// void PreCreateBT(BinTree t){
//	char ch;
//	ch = getchar();
//	
//	if(ch == '#')
//		t = NULL;
//	else{
//		t = (BinTree)malloc(sizeof(BinaryTreeNode));
//		t->data = ch;
//		printf("%c\n",t->data);
//		PreCreateBT(t->lchild);
//		PreCreateBT(t->rchild);
//	}
//} 
//如果是这么写的话,是无法正确创建的,我们需要对变量进行赋值,所以我们需要使用指针才行 BinTree *t

//先序遍历 
void PreOrderTransverse(BinTree t)
{
	if(t==NULL)
		return;
	printf("%c",t->data);
	PreOrderTransverse(t->lchild);
	PreOrderTransverse(t->rchild);
}
//中序遍历 
void InOrderTransverse(BinTree t)
{
	if(t==NULL)
		return;
	InOrderTransverse(t->lchild);
	printf("%c",t->data);
	InOrderTransverse(t->rchild);
}
//后序遍历 
void BeOrderTransverse(BinTree t)
{
	if(t==NULL)
		return;
	BeOrderTransverse(t->lchild);
	BeOrderTransverse(t->rchild);
	printf("%c",t->data);
}
int main()
{
	BinTree t;
	PreCreateBT(&t);
	printf("先序:"); 
	PreOrderTransverse(t);
	printf("中序:"); 
	InOrderTransverse(t);
	printf("后序:"); 
	BeOrderTransverse(t);
	
	return 0; 
}


你可能感兴趣的:(数据结构,数据结构,二叉树,c语言)