1. 程式人生 > 實用技巧 >二杈樹(c語言連結串列實現)

二杈樹(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; }