【数据结构】二叉树的递归遍历

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

typedef char ElemType;
typedef struct BiTree
{
	ElemType Elem;
	BiTree * LChild;
	BiTree * RChild;
}BiTree,*PBiTree;

/*建立二叉树*/
PBiTree CreateBiTree();
/*先序遍历二叉树*/
void ProOrderTravel(PBiTree Tree);
/*中序遍历二叉树*/
void InOrderTravel(PBiTree Tree);
/*后序遍历二叉树*/
void PostOrderTravel(PBiTree Tree);

void main()
{
	PBiTree BTree = CreateBiTree();

	printf("先序排列为:\n");
	ProOrderTravel(BTree);
	printf("\n中序排列为:\n");
	InOrderTravel(BTree);
	printf("\n后序排列为:\n");
	PostOrderTravel(BTree);
	printf("\n");
}

PBiTree CreateBiTree()
{
	PBiTree T;
	ElemType tmp;
	scanf("%c",&tmp);

	if (tmp == '#')
	{
		T = NULL;
		return NULL;
	}
	else
	{
		T = (PBiTree)malloc(sizeof(BiTree));
		T->Elem = tmp;
		T->LChild = CreateBiTree();
		T->RChild = CreateBiTree();
	}

	return T;
}

void ProOrderTravel(PBiTree Tree)
{
	if (Tree != NULL)
	{
		printf("%c\t",Tree->Elem);
		ProOrderTravel(Tree->LChild);
		ProOrderTravel(Tree->RChild);
	}
}

void InOrderTravel(PBiTree Tree)
{
	if (Tree != NULL)
	{
		/* 如果有左子树,一直向下寻找 */
		if (Tree->LChild != NULL) 
		{
			InOrderTravel(Tree->LChild);
		}

		printf("%c\t",Tree->Elem);

		InOrderTravel(Tree->RChild);
	}
}

void PostOrderTravel(PBiTree Tree)
{
	if (Tree != NULL)
	{
		/* 如果有左子树,一直向下寻找 */
		if (Tree->LChild != NULL) 
		{
			PostOrderTravel(Tree->LChild);
		}

		PostOrderTravel(Tree->RChild);

		printf("%c\t",Tree->Elem);
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐