C语言:先序、中序、后序建立二叉树,并输出

版权声明:转载请注明出处 https://blog.csdn.net/nanhuaibeian/article/details/88344531

注意

刚开始建立时,觉得代码很简单,然后就卡着了,原因就是创建函数,出不来,一直停留进去。

最后通过看大神的代码才恍然大悟,二叉树的建立,需要按照一棵满二叉树来建立

问题来了,我们的节点不够满二叉树的,这就是关键,空节点也需要补上,

这种方法仅限制在无条件建立二叉树,如果二叉排序树建立二叉树,对于左右子树建立时有条件限制,则不需要补空节点
可参考
回到本题:
比如我们需要创建一棵二叉树
在这里插入图片描述
而实际存储的确实:
在这里插入图片描述
也就是把空节点NULL补上
设置好空节点使用#代表,输出节点时可以使用个判断语句,将#筛选掉即可。

代码

#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(Bitnode)
//定义二叉树的二叉链表结点结构
typedef struct node {
	char data;
	struct node *lchild;
	struct node *rchild;
} Bitnode,*Bitree;
//按照先序序列创建节点
void CreatBitree(Bitree *root) {
	char ch;
	ch = getchar();
	if(ch=='#') {	//# 代表空节点
		*root = NULL;
		return;
	}
	else{
		*root = (Bitree)malloc(LEN);
		(*root)->data = ch;
		CreatBitree(&((*root)->lchild));
		CreatBitree(&((*root)->rchild));
		
	}
}

//先序遍历二叉树,root为指向二叉树根节点的指针
void Preorder(Bitree root) {

	if(root==NULL) return;
//		访问根节点
	if(root->data!='#')		printf("%c\n",root->data);
	Preorder(root->lchild);
	Preorder(root->rchild);
}

int main() {
	Bitree root=NULL;
	printf("请输入二叉树结点:");
	CreatBitree(&root);
	printf("这棵二叉树先序排列节点为:");
	Preorder(root);
	return 0;
}

在这里插入图片描述
中序、后序类比先序即可。

猜你喜欢

转载自blog.csdn.net/nanhuaibeian/article/details/88344531
今日推荐