데이터 구조 - 이 진 트 리 코드 구현 (구축, 앞 순서, 중간 순서, 후속 옮 겨 다 니 기, 나무의 깊이, 소각)

3939 단어 데이터 구조
코드 트 리 의 구 조 는?
                                        1
                              2             3
                     4          5     6         7
              8
#include 
#include 
#include 

/*     */
typedef struct treenode
{
    struct treenode *pstLeftChild;
    struct treenode *pstRightChild;
    int idata;
}TreeNode_S,TreeHead_S;

/*      */
TreeHead_S *InitTree(TreeNode_S *pstNode)
{
    TreeHead_S *tree = pstNode;
    return tree;
}

/*        */
TreeNode_S *CreateTreeNode(int idata, TreeNode_S *pstleftchild, TreeNode_S *pstrightchild)
{
    TreeNode_S *pstNewNode;

    pstNewNode = malloc(sizeof(TreeNode_S));
    if (pstNewNode != NULL)
    {
        pstNewNode->idata = idata;
        pstNewNode->pstLeftChild = pstleftchild;
        pstNewNode->pstRightChild = pstrightchild;
    }

    return pstNewNode;
}

/*       */
void DestroyTreeNode(TreeNode_S *pstTreeNode)
{
    if (pstTreeNode != NULL)
    {
        printf("%d ", pstTreeNode->idata);
        free(pstTreeNode);
    }

    return;
}

/*    */
void DestroyTree(TreeHead_S *pstTreeHead)
{
    if (pstTreeHead != NULL)
    {
        if (pstTreeHead->pstLeftChild != NULL)
        {
            DestroyTree(pstTreeHead->pstLeftChild);
        }

        if (pstTreeHead->pstRightChild != NULL)
        {
            DestroyTree(pstTreeHead->pstRightChild);
        }

        DestroyTreeNode(pstTreeHead);
    }
}

/*        */
int GetTreeDepth(TreeHead_S *pstTreeHead)
{
    int l = 0;
    int r = 0;
    TreeNode_S *pstLeftChild;
    TreeNode_S *pstRightChild;

    if (pstTreeHead == NULL)
    {
        return 0;
    }
    l = 1;
    r = 1;


    l += GetTreeDepth(pstTreeHead->pstLeftChild);
    r += GetTreeDepth(pstTreeHead->pstRightChild);

    if (l < r)
    {
        l = r;
    }

    return l;

}

/*      */
void Front_Scan(TreeHead_S *pstTreeHead)
{
    if (pstTreeHead == NULL)
    {
        return;
    }

    printf("%d ",pstTreeHead->idata);
    Front_Scan(pstTreeHead->pstLeftChild);
    Front_Scan(pstTreeHead->pstRightChild);

    return;
}

/*      */
void Middle_Scan(TreeHead_S *pstTreeHead)
{
    if (pstTreeHead == NULL)
    {
        return;
    }

    Middle_Scan(pstTreeHead->pstLeftChild);
    printf("%d ",pstTreeHead->idata);
    Middle_Scan(pstTreeHead->pstRightChild);

    return;
}

/*      */
void End_Scan(TreeHead_S *pstTreeHead)
{
    if (pstTreeHead == NULL)
    {
        return;
    }

    End_Scan(pstTreeHead->pstLeftChild);
    End_Scan(pstTreeHead->pstRightChild);
    printf("%d ",pstTreeHead->idata);

    return;
}

int main(void)
{
    TreeHead_S *pstTree;
    TreeNode_S *pstNode8 = CreateTreeNode(8, NULL, NULL);
    TreeNode_S *pstNode7 = CreateTreeNode(7, NULL, NULL);
    TreeNode_S *pstNode6 = CreateTreeNode(6, NULL, NULL);
    TreeNode_S *pstNode5 = CreateTreeNode(5, NULL, NULL);
    TreeNode_S *pstNode4 = CreateTreeNode(4, pstNode8, NULL);
    TreeNode_S *pstNode3 = CreateTreeNode(3, pstNode6, pstNode7);
    TreeNode_S *pstNode2 = CreateTreeNode(2, pstNode4, pstNode5);
    TreeNode_S *pstNode1 = CreateTreeNode(1, pstNode2, pstNode3);

    assert((pstNode1 != NULL)&&(pstNode2 != NULL)&&(pstNode3 != NULL)&&
           (pstNode4 != NULL)&&(pstNode5 != NULL)&&(pstNode6 != NULL)&&
           (pstNode7 != NULL)&&(pstNode8 != NULL));

    pstTree = InitTree(pstNode1);

    printf("depth:%d
", GetTreeDepth(pstTree)); printf("front scan: "); Front_Scan(pstTree); printf("
middle scan: "); Middle_Scan(pstTree); printf("
end scan: "); End_Scan(pstTree); printf("
destroy tree: "); DestroyTree(pstTree); printf("
"); return 0; }

좋은 웹페이지 즐겨찾기