靜態鏈式二叉樹(c語言版)

#include <stdio.h>

#include <malloc.h>


typedef struct Node{

char data;

struct Node * pLchild;

struct Node * pRchild;

}NODE,* PNODE;


PNODE create_binTree(void);

void pre_traver(PNODE);

void in_traver(PNODE);

void post_traver(PNODE);


void main(void){

PNODE pNode = create_binTree();

//先序遍歷

//pre_traver(pNode);

//中序遍歷

//in_traver(pNode);

//後序遍歷

post_traver(pNode);

}


PNODE create_binTree(void){

PNODE pA = (PNODE)malloc(sizeof(NODE));

PNODE pB = (PNODE)malloc(sizeof(NODE));

PNODE pC = (PNODE)malloc(sizeof(NODE));

PNODE pD = (PNODE)malloc(sizeof(NODE));

PNODE pE = (PNODE)malloc(sizeof(NODE));

pA->data = 'A';

pA->pLchild = pB;

pA->pRchild = pC;

pB->data = 'B';

pB->pLchild = NULL;

pB->pRchild = NULL;

pC->data = 'C';

pC->pLchild = pD;

pC->pRchild = NULL;

pD->data = 'D';

pD->pLchild = NULL;

pD->pRchild = pE;

pE->data = 'E';

pE->pLchild = NULL;

pE->pRchild = NULL;

return pA;

}

//先序遍歷

void pre_traver(PNODE pNode){

/*

思路:1、先訪問根節點

2、再先序遍歷左子樹

3、再先序遍歷右子樹

  */

if(NULL != pNode){

printf("%c\n",pNode->data);

if(NULL != pNode->pLchild){

pre_traver(pNode->pLchild);

}

if(NULL != pNode->pRchild){

pre_traver(pNode->pRchild);

}

}

}


//中序遍歷

void in_traver(PNODE pNode){

if(NULL != pNode){

if(NULL != pNode->pLchild){

in_traver(pNode->pLchild);

}

printf("%c\n",pNode->data);

if(NULL != pNode->pRchild){

in_traver(pNode->pRchild);

}

}

}


//後序遍歷

void post_traver(PNODE pNode){

if(NULL != pNode){

if(NULL != pNode->pLchild){

post_traver(pNode->pLchild);

}

if(NULL != pNode->pRchild){

post_traver(pNode->pRchild);

}

printf("%c\n",pNode->data);

}

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章