二杈樹(c語言連結串列實現)
阿新 • • 發佈:2020-08-03
用例中的樹的結構圖
#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; }