map<int, int> mapIndex; void mapToIndex(int inorder[], int n) { for (int i = 0; i < n; i++) { mapIndex.insert(map<int, int>::value_type(inorder[i], i); } } Node* buildInorderPreorder(int in[], int pre[], int n, int offset) { assert(n >= 0); if (n == 0) return NULL; int rootVal = pre[0]; int i = mapIndex[rootVal] - offset; Node* root = new Node(rootVal); root->left = buildInorderPreorder(in, pre+1, i, offset); root->right = buildInorderPreorder(in+i+1, pre+i+1, n-i-1, offset+i+1); return root; } Node* buildInorderPostorder(int in[], int post[], int n, int offset) { assert(n >= 0); if (n == 0) return NULL; int rootVal = post[n-1]; int i = mapIndex[rootVal] - offset; Node* root = new Node(rootVal); root->left = buildInorderPostorder(in, post, i, offset); root->right = buildINorderPostorder(in+i+1, post+i, n-i-1, offset+i+1); return root; }
时间: 2024-12-19 19:55:17