數據結構--樹--二叉樹

include<stdio.h>

include<malloc.h>

typedef struct BTNode
{
char data;//存放節點
struct BTNode * pLchild;//左子樹
struct BTNode * pRchild;//右子樹
}BTNODE, * PBTNODE;code

PBTNODE CreateBTree(void);//建立二叉樹
void PreTraverseBTree(struct BTNode * pT);//先序遍歷
void InTraverseBTree(struct BTNode * pT);//中序遍歷
void PostTraverseBTree(struct BTNode * pT);//後序遍歷get

int main(void)
{
PBTNODE pBT;
pBT = CreateBTree();//返回二叉樹的地址並賦給pBT;io

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;//返回二叉樹的地址

}di

//先序遍歷,先訪問根節點,再先序訪問左子樹,再先序右子樹
//用if判斷根節點下面是否爲空,減小運算量,
void PreTraverseBTree(struct BTNode * pT)
{
if( NULL != pT)
{
printf("%c; ", pT->data);co

if(NULL != pT->pLchild)
	{
		PreTraverseBTree(pT->pLchild);
		
	}
	
	if(NULL != pT->pRchild)
	{
		PreTraverseBTree(pT->pRchild);
		
	}
	
}

return ;

}data

//中序遍歷,先序訪問左子樹,再訪問根節點,再先序右子樹
void InTraverseBTree(struct BTNode * pT)
{return

if( NULL != pT)
{
	if(NULL != pT->pLchild)
	{
		InTraverseBTree(pT->pLchild);
		
	}
	
	printf("%c; ", pT->data);
	
	
	if(NULL != pT->pRchild)
	{
		InTraverseBTree(pT->pRchild);
		
	}
	
}

return ;

}void

//後序遍歷.先序左子樹,再先序右子樹,再訪問根節點
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 ;

}

相關文章
相關標籤/搜索