郝斌数据结构入门--P75-链式二叉树具体遍历程序演示

郝斌数据结构入门--P75-链式二叉树具体遍历程序演示

知道递归的实现与应用,二叉树的遍历就容易了。

代码如下:

#include <stdio.h>
#include <malloc.h>

struct BTNode
{
	char data;
	struct BTNode *pLchild;	//p是指针 L是左 child是孩子 
	struct BTNode *pRchild;
};

struct BTNode *CreateBTree(void);
void PreTraverseBTree(struct BTNode *pT);
void InTraverseBTree(struct BTNode *pT); 
void PostTraverseBTree(struct BTNode *pT);

int main(void)
{
	//原始二叉树: 
	//    A
	// B      C
	//      D 
	//        E        
	//
	struct BTNode *pT = CreateBTree();//返回根节点地址
	
	//线性输出 
	//先序 
	//PreTraverseBTree(pT);//ABCDE
	//中序
	//InTraverseBTree(pT);//BADEC
	//后序
	PostTraverseBTree(pT);//BEDCA
	
	return 0;
}

//后序遍历 
void PostTraverseBTree(struct BTNode *pT)
{
	//用根节点pT代表整一棵树 
	//用pT->pLchild可以代表整个左子树 
	if (NULL != pT)//防止 pT->pLchild和pT->pRchild为空 
	{
		//先先序访问左子树
		if (NULL != pT->pLchild)
		{
			PostTraverseBTree(pT->pLchild);
		}
		//再先序访问右子树
		if (NULL != pT->pRchild)
		{
			PostTraverseBTree(pT->pRchild);
		}
		//再先访问根节点
		printf("%c\n", pT->data);//pT就是根 
	}
}

//中序遍历 
void InTraverseBTree(struct BTNode *pT)
{
	//用根节点pT代表整一棵树 
	//用pT->pLchild可以代表整个左子树 
	if (NULL != pT)//防止 pT->pLchild和pT->pRchild为空 
	{
		//先先序访问左子树
		if (NULL != pT->pLchild)
		{
			InTraverseBTree(pT->pLchild);
		}
		//再先访问根节点
		printf("%c\n", pT->data);//pT就是根 
		
		//再先序访问右子树
		if (NULL != pT->pRchild)
		{
			InTraverseBTree(pT->pRchild);
		}
	}
}

//先序遍历 
void PreTraverseBTree(struct BTNode *pT)
{
	//用根节点pT代表整一棵树 
	//用pT->pLchild可以代表整个左子树 
	if (NULL != pT)//防止 pT->pLchild和pT->pRchild为空 
	{
		//先访问根节点
		printf("%c\n", pT->data);//pT就是根 
		//再先序访问左子树
		if (NULL != pT->pLchild)
		{
			PreTraverseBTree(pT->pLchild);//访问左子树 
		}
		//再先序访问右子树
		if (NULL != pT->pRchild)
		{
			PreTraverseBTree(pT->pRchild);//访问右子树 
		}
	}
}

struct BTNode *CreateBTree(void)
{
	//静态树,规定好的 
	
	struct BTNode *pA = (struct BTNode *)malloc(sizeof(struct BTNode));
	struct BTNode *pB = (struct BTNode *)malloc(sizeof(struct BTNode));
	struct BTNode *pC = (struct BTNode *)malloc(sizeof(struct BTNode));
	struct BTNode *pD = (struct BTNode *)malloc(sizeof(struct BTNode));
	struct BTNode *pE = (struct BTNode *)malloc(sizeof(struct BTNode));

	pA->data = 'A';
	pB->data = 'B';
	pC->data = 'C';
	pD->data = 'D';
	pE->data = 'E';
	
	pA->pLchild = pB;
	pA->pRchild = pC;
	pB->pLchild = pB->pRchild = NULL;
	pC->pLchild = pD;
	pC->pRchild = NULL;
	pD->pLchild = NULL;
	pD->pRchild = pE;
	pE->pLchild = pE->pRchild = NULL;
	
	return pA;//返回根节点地址 
}

猜你喜欢

转载自blog.csdn.net/xiaodingqq/article/details/83928135