数据结构-静态链式二叉树程序

Posted 坏坏-5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构-静态链式二叉树程序相关的知识,希望对你有一定的参考价值。

原二叉树

在这里插入图片描述

/*
	链式二叉树
*/
# include <stdio.h>
# include <malloc.h>

struct BTNode * CreatBTree(void);           //创建静态二叉树
void PreTraverseBTree(struct BTNode *);     //先序遍历二叉树
void InTraverseBTree(struct BTNode *);      //中序遍历二叉树
void PostTraverseBTree(struct BTNode *);    //后续遍历二叉树

/*创建节点*/
struct BTNode
{
	char data;
	struct BTNode * pLchild;  //左节点
	struct BTNode * pRchild;  //右节点
};

int main(void)
{
	struct BTNode * pT = CreatBTree();  //创建二叉树

	printf("----------先序输出----------\\n");
	PreTraverseBTree(pT);  //先序输出
	printf("\\n----------中序输出----------\\n");
	InTraverseBTree(pT);   //中序输出
	printf("\\n----------后序输出----------\\n");
	PostTraverseBTree(pT); //后续输出

	return 0;
}

struct BTNode * CreatBTree(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;
}

/*先序输出*/
void PreTraverseBTree(struct BTNode * pT)
{
	/*
		先访问根节点
		再先序访问左子树
		最后先序访问右子树
	*/
	if (NULL != pT)
	{
		/*遍历根节点*/
		printf("%c ", pT->data);

		/*当左子树不为空时调用先序遍历*/
		if (NULL != pT->pLchild)
			PreTraverseBTree(pT->pLchild);

		/*当右子树不为空时调用先序遍历*/
		if (NULL != pT->pRchild)
			PreTraverseBTree(pT->pRchild);
	}
}

/*中序输出*/
void InTraverseBTree(struct BTNode * pT)
{
	/*
		先序访问左子树
		再访问根节点
		最后先序访问右子树
	*/
	if (NULL != pT)
	{
		/*当左子树不为空时调用中序遍历*/
		if (NULL != pT->pLchild)
			InTraverseBTree(pT->pLchild);

		/*遍历根节点*/
		printf("%c ", pT->data);

		/*当右子树不为空时调用中序遍历*/
		if (NULL != pT->pRchild)
			InTraverseBTree(pT->pRchild);
	}
}

/*后序输出*/
void PostTraverseBTree(struct BTNode * pT)
{
	/*
		
		先序访问左子树
		然后先序访问右子树
		最后访问根节点
	*/
	if (NULL != pT)
	{
		/*当左子树不为空时调用后序遍历*/
		if (NULL != pT->pLchild)
			PostTraverseBTree(pT->pLchild);

		/*当右子树不为空时调用后序遍历*/
		if (NULL != pT->pRchild)
			PostTraverseBTree(pT->pRchild);

		/*遍历根节点*/
		printf("%c ", pT->data);
	}
}
/*运行结果*/
----------先序输出----------
A B C D E
----------中序输出----------
B A D E C
----------后序输出----------
B E D C A Press any key to continue . . .

以上内容均属原创,如有不详或错误,敬请指出。

以上是关于数据结构-静态链式二叉树程序的主要内容,如果未能解决你的问题,请参考以下文章

数据结构C语言 《四》二叉树链式的实现及操作《下》

数据结构初阶第八篇——二叉树的链式结构(二叉树的前中和后序遍历+层序遍历+链式结构的实现+相关简单的递归问题)

数据结构初阶第八篇——二叉树的链式结构(二叉树的前中和后序遍历+层序遍历+链式结构的实现+相关简单的递归问题)

链式二叉树具体程序演示

二叉树链式结构

二叉树链式存储和遍历