Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit c652a5e

Browse files
authoredJan 8, 2019
Add files via upload
1 parent 9d4f511 commit c652a5e

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// 16ms 57.59%
2+
3+
/**
4+
* Definition for a binary tree node.
5+
* struct TreeNode {
6+
* int val;
7+
* TreeNode *left;
8+
* TreeNode *right;
9+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
10+
* };
11+
*/
12+
13+
#include<vector>
14+
#include<algorithm>
15+
using namespace std;
16+
17+
class Solution
18+
{
19+
public:
20+
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder)
21+
{
22+
return helper(0, preorder.size() - 1, 0, inorder.size() - 1, preorder, inorder);
23+
}
24+
25+
TreeNode* helper(int preLeft, int preRight, int inLeft, int inRight, vector<int>& preorder, vector<int>& inorder)
26+
{
27+
if (preLeft > preRight)
28+
return 0;
29+
else if (preLeft == preRight)
30+
return new TreeNode(preorder[preLeft]);
31+
else
32+
{
33+
int rootValue = preorder[preLeft];
34+
35+
vector<int>::iterator iter = find(inorder.begin() + inLeft, inorder.begin() + inRight + 1, rootValue);
36+
int rootIndex = iter - inorder.begin();
37+
38+
TreeNode *root = new TreeNode(rootValue);
39+
root->left = helper(preLeft + 1, preLeft + rootIndex - inLeft, inLeft, rootIndex - 1, preorder, inorder);
40+
root->right = helper(preLeft + rootIndex - inLeft + 1, preRight, rootIndex + 1, inRight, preorder, inorder);
41+
42+
return root;
43+
}
44+
}
45+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# 152ms 80.48%
2+
3+
# Definition for a binary tree node.
4+
# class TreeNode:
5+
# def __init__(self, x):
6+
# self.val = x
7+
# self.left = None
8+
# self.right = None
9+
10+
class Solution:
11+
def buildTree(self, preorder, inorder):
12+
"""
13+
:type preorder: List[int]
14+
:type inorder: List[int]
15+
:rtype: TreeNode
16+
"""
17+
return self.helper(0, len(preorder) - 1, 0, len(inorder), preorder, inorder)
18+
19+
def helper(self, preLeft, preRight, inLeft, inRight, preorder, inorder):
20+
if preLeft > preRight:
21+
return None
22+
elif preLeft == preRight:
23+
return TreeNode(preorder[preLeft])
24+
else:
25+
rootValue = preorder[preLeft]
26+
rootIndex = inorder.index(rootValue)
27+
28+
root = TreeNode(rootValue)
29+
root.left = self.helper(preLeft + 1, preLeft + rootIndex - inLeft, inLeft, rootIndex - 1, preorder, inorder)
30+
root.right = self.helper(preLeft + rootIndex - inLeft + 1, preRight, rootIndex + 1, inRight, preorder, inorder)
31+
32+
return root

0 commit comments

Comments
 (0)
Please sign in to comment.