C语言实现二叉树构建:基于中序和后序遍历
#include <stdio.h> #include <stdlib.h>
struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; };
struct TreeNode* createNode(int val) { struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode)); node->val = val; node->left = NULL; node->right = NULL; return node; }
struct TreeNode* buildTree(int* inorder, int inorderSize, int* postorder, int postorderSize) { if (inorderSize == 0 || postorderSize == 0) { return NULL; } struct TreeNode* root = createNode(postorder[postorderSize - 1]); int i = 0; for (; i < inorderSize; i++) { if (inorder[i] == root->val) { break; } } root->left = buildTree(inorder, i, postorder, i); root->right = buildTree(inorder + i + 1, inorderSize - i - 1, postorder + i, postorderSize - i - 1); return root; }
int main() { int inorder[] = {9, 3, 15, 20, 7}; int postorder[] = {9, 15, 7, 20, 3}; int inorderSize = sizeof(inorder) / sizeof(inorder[0]); int postorderSize = sizeof(postorder) / sizeof(postorder[0]); struct TreeNode* root = buildTree(inorder, inorderSize, postorder, postorderSize); return 0; }
原文地址: https://www.cveoy.top/t/topic/nG1T 著作权归作者所有。请勿转载和采集!