/*** @file GM_BTree.h* @brief * @author * @date * @version */#ifndef _GM_BTREE_H#define _GM_BTREE_H#include#include typedef struct BTree{ char value; struct BTree* lChild; struct BTree* rChild;}BTree_Struct;#ifdef __cplusplusextern"C"{#endif /**< __cplusplus */ /** * @brief GM_BTree_Create * * 创建树. * @return BTree_Struct* */ BTree_Struct* GM_BTree_Create(); /** * @brief GM_BTree_PreOrder * * 先序遍历. * @param[in] tree */ void GM_BTree_PreOrder(BTree_Struct* tree); /** * @brief GM_BTree_InOrder * * 中序遍历. * @param[in] tree */ void GM_BTree_InOrder(BTree_Struct* tree); /** * @brief GM_BTree_PostOrder * * 后序遍历. * @param[in] tree */ void GM_BTree_PostOrder(BTree_Struct* tree); /** * @brief GM_BTree_Search_PreOrder * * 先序查找. * @param[in] tree * @param[in] value */ void GM_BTree_Search_PreOrder(BTree_Struct* tree, int value); /** * @brief GM_BTree_Search_InOrder * * 中序查找. * @param[in] tree * @param[in] value */ void GM_BTree_Search_InOrder(BTree_Struct* tree, int value); /** * @brief GM_BTree_Search_PostOrder * * 后序查找. * @param[in] tree * @param[in] value */ void GM_BTree_Search_PostOrder(BTree_Struct* tree, int value); /** * @brief GM_BTree_Clear * * 清空. * @param[in] tree */ void GM_BTree_Clear(BTree_Struct* tree);#ifdef __cplusplus}#endif /**< __cplusplus */#endif /**< _GM_BTREE_H */
/*** @file GM_BTree.c* @brief * @author * @date * @version */#include "GM_BTree.h"static BTree_Struct* pTree = NULL;BTree_Struct* GM_BTree_Create(){ BTree_Struct* node = (BTree_Struct*)malloc(sizeof(BTree_Struct)); if (NULL == node) { printf("Malloc memory error when creating tree"); return NULL; } scanf("%c", &node->value);//输入先序ABD.F..EG..H..C..,其中.表示为NULL /* A / \ B C / \ D E \ / \ F G H */ if(node->value=='.') { return NULL; } node->lChild = GM_BTree_Create(); node->rChild = GM_BTree_Create(); return node;}void GM_BTree_PreOrder(BTree_Struct* tree){ if (NULL == tree) { return; } printf("%c\n", tree->value); GM_BTree_PreOrder(tree->lChild); GM_BTree_PreOrder(tree->rChild);}void GM_BTree_InOrder(BTree_Struct* tree){ if (NULL == tree) { return; } GM_BTree_InOrder(tree->lChild); printf("%c\n", tree->value); GM_BTree_InOrder(tree->rChild);}void GM_BTree_PostOrder(BTree_Struct* tree){ if (NULL == tree) { return; } GM_BTree_PostOrder(tree->lChild); GM_BTree_PostOrder(tree->rChild); printf("%c\n", tree->value);}void GM_BTree_Search_PreOrder(BTree_Struct* tree, int value){ if (NULL == tree) { return; } if (value == tree->value) { printf("Find\n"); } GM_BTree_Search_PreOrder(tree->lChild, value); GM_BTree_Search_PreOrder(tree->rChild, value);}void GM_BTree_Search_InOrder(BTree_Struct* tree, int value){ if (NULL == tree) { return; } GM_BTree_Search_InOrder(tree->lChild, value); if (value == tree->value) { printf("Find\n"); } GM_BTree_Search_InOrder(tree->rChild, value);}void GM_BTree_Search_PostOrder(BTree_Struct* tree, int value){ if (NULL == tree) { return; } GM_BTree_Search_PostOrder(tree->lChild, value); GM_BTree_Search_PostOrder(tree->rChild, value); if (value == tree->value) { printf("Find\n"); }}void GM_BTree_Clear(BTree_Struct* tree){ if (NULL == tree) { return; } GM_BTree_Clear(tree->lChild); GM_BTree_Clear(tree->rChild); tree->lChild = NULL; tree->rChild = NULL; tree = NULL;}void main(){ pTree = GM_BTree_Create(); GM_BTree_PreOrder(pTree); printf("\n"); GM_BTree_InOrder(pTree); printf("\n"); GM_BTree_PostOrder(pTree); printf("\n"); GM_BTree_Search_PreOrder(pTree, 'F'); GM_BTree_Search_PreOrder(pTree, 'J'); GM_BTree_Search_InOrder(pTree, 'F'); GM_BTree_Search_InOrder(pTree, 'J'); GM_BTree_Search_PostOrder(pTree, 'F'); GM_BTree_Search_PostOrder(pTree, 'J'); GM_BTree_Clear(pTree); pTree = NULL;}