二杈树(c语言链表实现)

用例中的树的结构图

 

 

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

typedef int ElemType;
struct TreeNode
{
    ElemType value;
    struct TreeNode *lChild, *rChild;
};
typedef struct TreeNode TreeNode;
typedef struct TreeNode **TreeNodePoint;

// 建立一个节点
TreeNode *createTreeNode(ElemType value)
{
    TreeNode *node = (TreeNode *) malloc(sizeof(TreeNode));
    node->value = value;
    node->lChild = NULL;
    node->rChild = NULL;
    return node;
}

// 建立一棵二杈树
TreeNode *createTree(TreeNode *treeNode, ElemType arr[], int start, int end)
{
    if (start > end) return NULL;
    int mid = (start + end) / 2;
    treeNode = createTreeNode(arr[mid]);
    treeNode->lChild =  createTree(treeNode->lChild, arr, start, mid - 1);
    treeNode->rChild = createTree(treeNode->rChild, arr, mid + 1, end);
    return treeNode;
}

// 销毁树
void destroyTree(TreeNode *treeNode)
{
    if (treeNode == NULL) return;
    destroyTree(treeNode->lChild);
    destroyTree(treeNode->rChild);
    free(treeNode);
    treeNode = NULL;
}

// 先序遍历
void firstTraverse(TreeNode *treeNode)
{
    if (treeNode == NULL) return;
    printf("%d ", treeNode->value);
    firstTraverse(treeNode->lChild);
    firstTraverse(treeNode->rChild);
}

// 中序遍历
void middleTraverse(TreeNode *treeNode)
{
    if (treeNode == NULL) return;
    middleTraverse(treeNode->lChild);
    printf("%d ", treeNode->value);
    middleTraverse(treeNode->rChild);
}

// 后序遍历
void lastTraverse(TreeNode *treeNode)
{
    if (treeNode == NULL) return;
    lastTraverse(treeNode->lChild);
    lastTraverse(treeNode->rChild);
    printf("%d ", treeNode->value);
}

int main()
{
    TreeNode *pNode = NULL;
    ElemType arr[] = {4, 2, 5, 1, 6, 3, 7};
    pNode = createTree(pNode, arr, 0, 6);
    printf("\n先序===========================\n");
    firstTraverse(pNode);
    printf("\n中序===========================\n");
    middleTraverse(pNode);
    printf("\n后序===========================\n");
    lastTraverse(pNode);
    destroyTree(pNode);
    return 0;
}

 

posted on 2020-08-03 17:00  哈哈哈天蝎  阅读(246)  评论(0)    收藏  举报

导航