根据前序和中序遍历构造二叉树
#include<stdio.h>typedef struct btnode{ char value; struct btnode *left; struct btnode *right;}btnode;int idxes_map[256];void map_idxes(char *inorder, int n){ int i; for(i=0; i<n; i++) idxes_map[inorder[i]] = i;}btnode *build_from_preorder_and_inorder(char *preorder, char *inorder, int n, int offset){ if(n==0) return NULL; char root_val = preorder[0]; int i = idxes_map[root_val]-offset; btnode *root = malloc(sizeof(btnode)); root->value = root_val; root->left = build_from_preorder_and_inorder(preorder+1, inorder, i, offset); root->right = build_from_preorder_and_inorder(preorder+i+1, inorder+i+1, n-i-1, offset+i+1); return root;}void postorder(btnode *root){ if(root) { postorder(root->left); postorder(root->right); printf("%c", root->value); }}int main(){ char *preorder = "ABDEGCFH"; char *inorder = "DBEGAHFC"; int n = strlen(preorder); map_idxes(inorder, n); btnode *root = build_from_preorder_and_inorder(preorder, inorder, n, 0); postorder(root); printf("\n"); return 0;}- 1楼leihengxin昨天 22:20
- 顶一下。