二叉树的3种递归遍历

Posted on 2016-05-31 15:48  洪爵士  阅读(615)  评论(0编辑  收藏  举报
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//二叉链表示法
typedef struct BiTNode
{
	char data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void preOrder(BiTNode *root)//先序遍历(先遍历根然后遍历左子树最后遍历右子树)
{
	if(root==NULL)
	{
		return ;
	}
	printf("%c ",root->data);
	preOrder(root->lchild);//遍历左子树
	preOrder(root->rchild);//遍历右子树
}
void inOrder(BiTNode *root)//中序遍历(先遍历左子树然后遍历根最后遍历右子树)
{
	if(root==NULL)
	{
		return ;
	}
	inOrder(root->lchild);//遍历左子树
	printf("%c ",root->data);
	inOrder(root->rchild);//遍历右子树
}
void postOrder(BiTNode *root)//后序遍历(先遍历左子树然后遍历右子树最后遍历根)
{
	if(root==NULL)
	{
		return ;
	}
	postOrder(root->lchild);//遍历左子树
	postOrder(root->rchild);//遍历右子树
	printf("%c ",root->data);
}
void main()
{
	//创建树的节点
	BiTNode a={'A',NULL,NULL};
	BiTNode b={'B',NULL,NULL};
	BiTNode c={'C',NULL,NULL};
	BiTNode d={'D',NULL,NULL};
	BiTNode e={'E',NULL,NULL};
	BiTNode f={'F',NULL,NULL};
	BiTNode g={'G',NULL,NULL};
	BiTNode h={'H',NULL,NULL};
	BiTNode i={'I',NULL,NULL};
	//建立关系
	a.lchild=&b;
	a.rchild=&e;
	b.rchild=&c;
	c.lchild=&d;
	e.rchild=&f;
	f.lchild=&g;
	g.lchild=&h;
	g.rchild=&i;
	//树的遍历
	printf("先序遍历:");
	preOrder(&a);
	printf("\n");
	printf("中序遍历:");
	inOrder(&a);
	printf("\n");
	printf("后序遍历:");
	postOrder(&a);
	printf("\n");
	system("pause");
}