C实现二叉树BTree基本操作

 
/**
* @file GM_BTree.h
* @brief 
* @author Don Hao
* @date 2011-8-22 21:51:35
* @version 
* <pre><b>copyright: </b></pre>
* <pre><b>email: </b>[email protected]</pre>
* <pre><b>company: </b>http://blog.csdn.net/donhao</pre>
* <pre><b>All rights reserved.</b></pre>
* <pre><b>modification:</b></pre>
* <pre>Write modifications here.</pre>
*/
#ifndef _GM_BTREE_H
#define _GM_BTREE_H

#include <stdlib.h>
#include <stdio.h>

typedef struct BTree
{
    char value;
    struct BTree* lChild;
    struct BTree* rChild;
}BTree_Struct;

#ifdef __cplusplus
extern"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 Don Hao
* @date 2011-8-22 21:51:13
* @version 
* <pre><b>copyright: </b></pre>
* <pre><b>email: </b>[email protected]</pre>
* <pre><b>company: </b>http://blog.csdn.net/donhao</pre>
* <pre><b>All rights reserved.</b></pre>
* <pre><b>modification:</b></pre>
* <pre>Write modifications here.</pre>
*/
#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;
}

你可能感兴趣的:(C实现二叉树BTree基本操作)