首页 > 其他 > 详细

数据结构--树--二叉树

时间:2020-08-27 23:43:29      阅读:86      评论:0      收藏:0      [点我收藏+]

include<stdio.h>

include<malloc.h>

typedef struct BTNode
{
char data;//存放节点
struct BTNode * pLchild;//左子树
struct BTNode * pRchild;//右子树
}BTNODE, * PBTNODE;

PBTNODE CreateBTree(void);//创建二叉树
void PreTraverseBTree(struct BTNode * pT);//先序遍历
void InTraverseBTree(struct BTNode * pT);//中序遍历
void PostTraverseBTree(struct BTNode * pT);//后序遍历

int main(void)
{
PBTNODE pBT;
pBT = CreateBTree();//返回二叉树的地址并赋给pBT;

PreTraverseBTree(pBT);//先序遍历
printf("\n");
InTraverseBTree(pBT);//中序遍历
printf("\n");
PostTraverseBTree(pBT);//后序遍历
printf("\n");

return 0;

}

//创建二叉树
PBTNODE CreateBTree(void)
{
//创建单个子树
PBTNODE pA = (PBTNODE)malloc(sizeof(BTNODE));
PBTNODE pB = (PBTNODE)malloc(sizeof(BTNODE));
PBTNODE pC = (PBTNODE)malloc(sizeof(BTNODE));
PBTNODE pD = (PBTNODE)malloc(sizeof(BTNODE));
PBTNODE pE = (PBTNODE)malloc(sizeof(BTNODE));
PBTNODE pF = (PBTNODE)malloc(sizeof(BTNODE));

//二叉树节点初始化
pA->data = ‘A‘;
pB->data = ‘B‘;
pC->data = ‘C‘;
pD->data = ‘D‘;
pE->data = ‘E‘;
pF->data = ‘F‘;

//关联各个子树,确定各个子树之间的关系
pA->pLchild = pB;
pA->pRchild = pC;
pB->pLchild = pD;
pB->pRchild = pE;
pC->pLchild = pF;
pC->pRchild = NULL;
pD->pLchild = NULL;
pD->pRchild = NULL;
pE->pLchild = NULL;
pE->pRchild = NULL;
pF->pLchild = NULL;
pF->pRchild = NULL;

return pA;//返回二叉树的地址

}

//先序遍历,先访问根节点,再先序访问左子树,再先序右子树
//用if判断根节点下面是否为空,减少运算量,
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);
		
	}
	
}

return ;	

}

//中序遍历,先序访问左子树,再访问根节点,再先序右子树
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);
		
	}
	
}

return ;	

}

//后序遍历.先序左子树,再先序右子树,再访问根节点
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);
	
}

return ;	

}

数据结构--树--二叉树

原文:https://www.cnblogs.com/jtpw/p/13574350.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!