Skip to content

Commit 8d6e219

Browse files
build binary tree from preorder and inorder sequence
1 parent 6aafcb5 commit 8d6e219

File tree

2 files changed

+48
-10
lines changed

2 files changed

+48
-10
lines changed

src/105.cpp

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#include <vector>
2+
#include <iostream>
3+
#include <string>
4+
5+
struct TreeNode {
6+
int val;
7+
TreeNode *left;
8+
TreeNode *right;
9+
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
10+
};
11+
12+
class Solution {
13+
private:
14+
void buildRoot(const std::vector<int> &preorder, const std::vector<int> &inorder, TreeNode *&root) {
15+
if (!preorder.size()) return;
16+
root = new TreeNode(preorder.front());
17+
for (int i = 0; i < inorder.size(); ++i) {
18+
if (inorder[i] == preorder.front()) {
19+
buildRoot(std::vector<int>(preorder.begin() + 1, preorder.begin() + 1 + i),
20+
std::vector<int>(inorder.begin(), inorder.begin() + i), root->left);
21+
buildRoot(std::vector<int>(preorder.begin() + 1 + i, preorder.end()),
22+
std::vector<int>(inorder.begin() + i + 1, inorder.end()), root->right);
23+
return;
24+
}
25+
}
26+
}
27+
28+
public:
29+
TreeNode *buildTree(const std::vector<int> &preorder, const std::vector<int> &inorder) {
30+
TreeNode *root = nullptr;
31+
buildRoot(preorder, inorder, root);
32+
return root;
33+
}
34+
};
35+
36+
void traversing(TreeNode *root, unsigned level) {
37+
if (!root) return;
38+
traversing(root->right, level + 1);
39+
std::cout << std::string(4 * level, ' ') << root->val << std::endl;
40+
traversing(root->left, level + 1);
41+
}
42+
43+
int main() {
44+
Solution s;
45+
traversing(s.buildTree(std::vector<int>({3, 9, 20, 15, 7}), std::vector<int>({9, 3, 15, 20, 7})), 0);
46+
return 0;
47+
}
48+

src/hellp.cpp

-10
This file was deleted.

0 commit comments

Comments
 (0)