C语言:二叉树的三种遍历方式
2017-08-27 15:12
381 查看
二叉树如下:
遍历后的结果应该是:
先序遍历:ABDEFCGHI
中序遍历:EDFBACHGI
后序遍历:EFDBHIGCA
遍历结果为:
遍历后的结果应该是:
先序遍历:ABDEFCGHI
中序遍历:EDFBACHGI
后序遍历:EFDBHIGCA
#include <stdio.h> #include <stdbool.h> typedef char ElemType; typedef struct BTNode{ ElemType data;//数据域 struct BTNode *pLChild;//左子树地址 struct BTNode *pRChild;//右子树地址 }BTNODE, * PBTNODE; PBTNODE creatBTree(); void preTranverseBTree(PBTNODE); void inTranverseBTree(PBTNODE); void postTranverseBTree(PBTNODE); int main(void){ PBTNODE pRoot = creatBTree(); printf("先序遍历:"); preTranverseBTree(pRoot);//先序遍历:ABDEFCGHI printf("\n"); printf("中序遍历:"); inTranverseBTree(pRoot);//中序遍历:EDFBACHGI printf("\n"); printf("后序遍历:"); postTranverseBTree(pRoot);//后序遍历:EFDBHIGCA printf("\n"); return 0; } PBTNODE creatBTree(){ PBTNODE pA = (PBTNODE)malloc(sizeof(BTNODE));//A PBTNODE pB = (PBTNODE)malloc(sizeof(BTNODE));//B PBTNODE pC = (PBTNODE)malloc(sizeof(BTNODE));//C PBTNODE pD = (PBTNODE)malloc(sizeof(BTNODE));//D PBTNODE pE = (PBTNODE)malloc(sizeof(BTNODE));//E PBTNODE pF = (PBTNODE)malloc(sizeof(BTNODE));//F PBTNODE pG = (PBTNODE)malloc(sizeof(BTNODE));//G PBTNODE pH = (PBTNODE)malloc(sizeof(BTNODE));//H PBTNODE pI = (PBTNODE)malloc(sizeof(BTNODE));//I pA->data = 'A'; pB->data = 'B'; pC->data = 'C'; pD->data = 'D'; pE->data = 'E'; pF->data = 'F'; pG->data = 'G'; pH->data = 'H'; pI->data = 'I'; pA->pLChild = pB; pA->pRChild = pC; pB->pLChild = pD; pB->pRChild = NULL; pC->pLChild = NULL; pC->pRChild = pG; pD->pLChild = pE; pD->pRChild = pF; pE->pLChild = NULL; pE->pRChild = NULL; pF->pLChild = NULL; pF->pRChild = NULL; pG->pLChild = pH; pG->pRChild = pI; pH->pLChild = NULL; pH->pRChild = NULL; pI->pLChild = NULL; pI->pRChild = NULL; return pA; } bool hasLeftChild(PBTNODE pBTNode){ return pBTNode->pLChild != NULL; } bool hasRightChild(PBTNODE pBTNode){ return pBTNode->pRChild != NULL; } bool isNotLeafNode(PBTNODE pBTNode){ return hasLeftChild(pBTNode) || hasRightChild(pBTNode); } //先序遍历:ABDEFCGHI void preTranverseBTree(PBTNODE pRoot){ //根节点,左子树,右子树 printf("%c ", pRoot->data); if (hasLeftChild(pRoot)){ preTranverseBTree(pRoot->pLChild); } if (hasRightChild(pRoot)){ preTranverseBTree(pRoot->pRChild); } } //中序遍历:EDFBACHGI void inTranverseBTree(PBTNODE pRoot){ //左子树,根节点,右子树 if (hasLeftChild(pRoot)){ inTranverseBTree(pRoot->pLChild); } printf("%c ", pRoot->data); if (hasRightChild(pRoot)){ inTranverseBTree(pRoot->pRChild); } } //后序遍历:EFDBHIGCA void postTranverseBTree(PBTNODE pRoot){ //左子树,右子树,根节点 if (hasLeftChild(pRoot)){ postTranverseBTree(pRoot->pLChild); } if (hasRightChild(pRoot)){ postTranverseBTree(pRoot->pRChild); } printf("%c ", pRoot->data); }
遍历结果为:
相关文章推荐
- 二叉树的三种遍历方式(C语言描述)
- 二叉树的三种遍历方式(递归和非递归)
- c语言数据结构中二叉树的先序、中序、后序三种递归遍历代码
- 二叉树三种遍历方式 递归与非递归实现 总结
- 二叉树的三种遍历方式的递归实现和迭代实现
- 二叉树的常见方法及三种遍历方式 Java 实现
- 数据结构_二叉树的先序建立与先序,中序,后序(递归)遍历方式_C语言源代码
- 二叉树的三种遍历方式(递归与非递归详细实现)
- 二叉树的三种遍历方式的递归实现和非递归实现
- 二叉树的三种遍历方式java实现
- 二叉树的遍历有三种方式
- 二叉树的三种遍历方式
- 二叉树三种遍历方式代码实现
- 二叉树三种遍历方式的六种实现方法
- 二叉树三种遍历方式的六种实现方法
- 【python中二叉树的实现】python中二叉树的创建、三种方式递归遍历和非递归遍历
- 详细讲解二叉树三种遍历方式的递归与非递归实现
- Java中创建二叉树并实现三种遍历方式
- 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
- 二叉树的存储方式以及递归和非递归的三种遍历方式