C语言实现递归式遍历二叉树

//递归实现二叉树的遍历;

//通俗来讲:

        先序遍历:就是第一次遇到结点的顺序记录;

            

        中序遍历:就是第二次遇到结点的记录;

        后序遍历:就是第三次遇到结点的记录;

#include<stdio.h>
#include<stdlib.h>

typedef struct tree    
{
	char ch;
	struct tree *lchild;
	struct tree *rchild;
}BitTree;

BitTree *CreateTree()  //创建树;
{
	BitTree *bt;
	char str;
	scanf("%c",&str);
	if(str=='#')
		return NULL;
	else
	{
		bt=(BitTree *)malloc(sizeof(BitTree));
		bt->ch=str;
		bt->lchild=CreateTree();
		bt->rchild=CreateTree();
		return bt;
	}
}

//先序遍历二叉树,递归实现;
void PreOrder(BitTree *bt)
{
	if(bt)
	{
		printf(" %c ",bt->ch);   //第一次遇到就输出;
		PreOrder(bt->lchild);
		PreOrder(bt->rchild);
	}
}

//中序遍历二叉树,递归实现;
void InOrder(BitTree *bt)
{
	if(bt)
	{
		InOrder(bt->lchild);
		printf(" %c ",bt->ch);   //第二次遇到就输出;
		InOrder(bt->rchild);
	}
}

//后序遍历二叉树,递归实现;
void PostOrder(BitTree *bt)
{
	if(bt)
	{
		PostOrder(bt->lchild);
		PostOrder(bt->rchild);
		printf(" %c ",bt->ch);   //第三次遇到就输出;
	}
}

//释放树的结点;
void DestroyTree(BitTree *bt)
{
	if(bt)
	{
		DestroyTree(bt->lchild);
		DestroyTree(bt->rchild);
		free(bt);
	}
}

int main(void)
{
	BitTree *bt;
	printf("请以先序输入二叉树(#表示该结点的子结点为空):\n");
	bt=CreateTree();

	printf("\n递归先序的结果:\n");
	PreOrder(bt);

	printf("\n递归中序的结果:\n");
	InOrder(bt);

	printf("\n递归后序的结果:\n");
	PostOrder(bt);

	printf("\n");
	DestroyTree(bt);  //释放树结点;
	return 0;
}

//以AB##C#D##为例:


  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值