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

前端之家收集整理的这篇文章主要介绍了【数据结构】二叉树的递归遍历前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
#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);
	}
}

猜你在找的数据结构相关文章