408递归数据结构与算法静态 链式二叉树Akari2023-11-202024-01-10此为静态的链式二叉树。 /** * A * B C * D * E **/# include <stdio.h># include <malloc.h>typedef struct BTNode{ char data; // 数据域 struct BTNode* pLchild; // 左子树指针域 p是指针 L是左孩子 R是右孩子 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 pT = CreateBTree(); printf("先序遍历二叉树:\n"); PreTraverseBTree(pT); printf("中序遍历二叉树:\n"); InTraverseBTree(pT); printf("后序遍历二叉树:\n"); PostTraverseBTree(pT); return 0;}PBTNODE CreateBTree(void){ // 创建5个节点 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)); // 给5个节点分配数据 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) // 先序遍历二叉树{ // pT->pLchild可以代表整个左子树 // pT->pRchild可以代表整个右子树 if( NULL != pT ) // 根节点地址不为空时才创建二叉树 { printf("%c\n", 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\n", 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\n", pT->data); // 后序遍历根节点 }}