数据结构学习之_二叉树的遍历

/*
	2013年3月25日 22:17:47 xulei
	二叉树的遍历分为三种:
	先序遍历(DLR): 先访问根节点, 再访问左节点, 最后访问右节点
	中序遍历(LDR): 先访问左节点, 再访问根节点, 最后访问右节点
	后序遍历(LRD): 先访问左节点, 再访问右节点, 最后访问根节点
*/

#include 
#include 

struct BiTreeNode
{
	char data;					// 数据域, 假设为char 
	struct BiTreeNode * Lchild;		// 左节点
	struct BiTreeNode * Rchild;		// 右节点
};

//先序遍历(DLR): 
int PreOrder(struct BiTreeNode *p);
//中序遍历(LDR):
int InOrder(struct BiTreeNode *p);
//后序遍历(LRD):
int PostOrder(struct BiTreeNode *p);
// 静态创建一个二叉树
struct BiTreeNode * CreateTree();

int main(int argc, char **argv)
{
	struct BiTreeNode *tree = CreateTree();
	PreOrder(tree);
	printf("\n");
	InOrder(tree);
	printf("\n");
	PostOrder(tree);
	printf("\n");

	return 0;
}

int PreOrder(struct BiTreeNode *p)
{
	if (p != NULL)
	{
		printf("%c ", p->data);	// 先对数据域操作
		PreOrder(p->Lchild);		// 再遍历左节点
		PreOrder(p->Rchild);		// 最后遍历右节点
	}
	return 0;
}

//中序遍历(LDR):
int InOrder(struct BiTreeNode *p)
{
	if (p != NULL)
	{
		InOrder(p->Lchild);			// 先遍历左节点
		printf("%c ", p->data);	// 再对数据域操作
		InOrder(p->Rchild);			// 最后遍历右节点
	}
	return 0;
}

//后序遍历(LRD):
int PostOrder(struct BiTreeNode *p)
{
	if (p != NULL)
	{
		PostOrder(p->Lchild);		// 先遍历左节点
		PostOrder(p->Rchild);		// 后遍历右节点
		printf("%c ", p->data);	// 最后对数据域操作
	}
	return 0;
}

// 静态创建一个二叉树
struct BiTreeNode * CreateTree()
{
	struct BiTreeNode *A = (struct BiTreeNode *)malloc(sizeof(struct BiTreeNode));
	struct BiTreeNode *B = (struct BiTreeNode *)malloc(sizeof(struct BiTreeNode));
	struct BiTreeNode *C = (struct BiTreeNode *)malloc(sizeof(struct BiTreeNode));
	struct BiTreeNode *D = (struct BiTreeNode *)malloc(sizeof(struct BiTreeNode));
	struct BiTreeNode *E = (struct BiTreeNode *)malloc(sizeof(struct BiTreeNode));
	struct BiTreeNode *F = (struct BiTreeNode *)malloc(sizeof(struct BiTreeNode));
	struct BiTreeNode *G = (struct BiTreeNode *)malloc(sizeof(struct BiTreeNode));
	struct BiTreeNode *H = (struct BiTreeNode *)malloc(sizeof(struct BiTreeNode));
	
	A->data = 'A';					//	        A
	A->Rchild = C;					//		   /  \
	A->Lchild = B;					//		  B    C
	B->data = 'B';					//		   \     \
	B->Rchild = D;					//			D     E
	B->Lchild = NULL;				//		   / \     \
	C->data = 'C';					//		  F   G     H
	C->Rchild = E;					//
	C->Lchild = NULL;				//
	D->data = 'D';					//
	D->Rchild = G;					//
	D->Lchild = F;					//
	E->data = 'E';					//
	E->Rchild = H;					//
	E->Lchild = NULL;				//
	F->data = 'F';					//
	F->Rchild = F->Lchild = NULL;	//
	G->data = 'G';
	G->Lchild = G->Rchild = NULL;
	H->data = 'H';
	H->Rchild = H->Lchild = NULL;

	return A;
}

你可能感兴趣的:(C/C++,数据结构和算法)