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
| int n, mid[N], lev[N]; map<int, int> mp;
Node* build(int l, int r, const vector<int>& level) { if (l > r) return null;
Node* root = new Node(); root->val = level[0]; int pos = mp[root->val];
vector<int> leftLev, rightLev; for (int i = 1; i < level.size(); i++) { int p = mp[level[i]];
if (p < pos) leftLev.push_back(level[i]); else rightLev.push_back(level[i]); }
root->left = build(l, pos - 1, leftLev); root->right = build(pos + 1, r, rightLev); return root; }
|