1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| #include <stdio.h> #include <stdlib.h> #include <string.h>
typedef struct TreeNode { struct TreeNode* left; struct TreeNode* right; char elem; } TreeNode;
char * getString(char * s, int n, int m) { n ++; m ++; char *r = (char *) malloc(sizeof(char) * (m - n)); s = s + (n - 1); for(int i = 0; i < m - (n - 1); i ++) { r[i] = s[i]; } return r; }
int tempIndex = 0; char *inorder; void inTree(TreeNode *tree) { if(tree != NULL) { inTree(tree->left);
printf(" %c ", tree->elem); if(tempIndex == 0) { inorder = (char *) malloc(sizeof(char)); } else { inorder = (char *) realloc(inorder, sizeof(char)*(tempIndex+1)); } inorder[tempIndex] = tree->elem; tempIndex ++; inTree(tree->right); } }
TreeNode * buildTree(char* preorder, char* postorder){ if(strlen(preorder) == 1 || strlen(postorder) == 1) { TreeNode * r = (TreeNode *) malloc(sizeof(TreeNode)); r->elem = preorder[0]; return r; }
TreeNode *node = (TreeNode *) malloc(sizeof(TreeNode)); node->elem = preorder[0];
if(preorder[1] != postorder[strlen(postorder) - 2]) { int m=0, n=1; for(int i=0; i<strlen(postorder); i++) { if(preorder[1] == postorder[i]) { m = i + 1; } } printf("左子树先后序:\n"); printf("---%s----\n", getString(postorder, 0, m-1)); printf("---%s----\n", getString(preorder, n, m)); printf("右子树先后序:\n"); printf("---%s----\n", getString(preorder, m+1, strlen(preorder)-1)); printf("---%s----\n", getString(postorder, m, strlen(postorder) - 2));
node->left = buildTree(getString(preorder, n, m),getString(postorder, 0, m-1)); node->right = buildTree(getString(preorder, m+1, strlen(preorder)-1),getString(postorder, m, strlen(postorder) - 2)); } else { node->left = buildTree(getString(preorder, 1, strlen(preorder)-1),getString(postorder, 0, strlen(postorder) - 2)); node -> right = NULL; }
return node; }
int main() { char *pr = "ABDGHECKFIJ"; char *po = "GHDEBKJIFCA"; TreeNode * t = buildTree(pr,po); printf("\n\n中序遍历结果为:"); inTree(t); printf("\n"); return 0; }
|