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

#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);
	}
}

相关文章

【啊哈!算法】算法3:最常用的排序——快速排序       ...
匿名组 这里可能用到几个不同的分组构造。通过括号内围绕的正...
选择排序:从数组的起始位置处开始,把第一个元素与数组中其...
public struct Pqitem { public int priority; ...
在编写正则表达式的时候,经常会向要向正则表达式添加数量型...
来自:http://blog.csdn.net/morewindows/article/details/6...