二杈树(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; }
浙公网安备 33010602011771号