二叉树的建立与先序中序后序遍历

来源:互联网 发布:mac做双系统 编辑:程序博客网 时间:2024/05/15 22:42

代码摘自郝斌老师的数据结构视频

建立如下图所示的二叉树:

代码如下:

#include <stdio.h>#include <malloc.h>struct BTNode {int data;struct BTNode * pLchild; //p是指针 L是左 child是孩子struct BTNode * pRchild; };//函数声明BTNode * CreateBTree();void PreTraverseBTree(BTNode * pT);void InTraverseBTree(BTNode * pT);void PostTraverseBTree(BTNode * pT);int main(void){BTNode *pT = CreateBTree();PreTraverseBTree(pT);     //先序遍历//InTraverseBTree(pT);    //中序遍历//PostTraverseBTree(pT);  //后序遍历return 0;}void PreTraverseBTree(BTNode * pT){if(NULL != pT) {printf("%c\n", pT->data);if(NULL != pT->pLchild) PreTraverseBTree(pT->pLchild);if(NULL != pT->pRchild)PreTraverseBTree(pT->pRchild);}}void InTraverseBTree(BTNode * pT){        if(NULL != pT) {                if(NULL != pT->pLchild)                        InTraverseBTree(pT->pLchild);printf("%c\n", pT->data);                if(NULL != pT->pRchild)                        InTraverseBTree(pT->pRchild);        }}void PostTraverseBTree(BTNode * pT){        if(NULL != pT) {                if(NULL != pT->pLchild)                        PostTraverseBTree(pT->pLchild);                if(NULL != pT->pRchild)                        PostTraverseBTree(pT->pRchild);printf("%c\n", pT->data);        }}BTNode * CreateBTree(){BTNode * pA = (BTNode*)malloc(sizeof(BTNode));BTNode * pB = (BTNode*)malloc(sizeof(BTNode));BTNode * pC = (BTNode*)malloc(sizeof(BTNode));BTNode * pD = (BTNode*)malloc(sizeof(BTNode));BTNode * pE = (BTNode*)malloc(sizeof(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;}

先序遍历,中序遍历和后序遍历其实就是根结点的先后输出顺序不一样。

如上的二叉树不同方式遍历结果如下

先序遍历:ABCDE

中序遍历:BADEC

后序遍历:BEDCA