Skip to content

Commit 7f870fa

Browse files
committed
feat: construct-binary-tree-from-preorder-and-inorder-traversal solution
1 parent eddea6e commit 7f870fa

File tree

1 file changed

+42
-0
lines changed
  • construct-binary-tree-from-preorder-and-inorder-traversal

1 file changed

+42
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*/
14+
/**
15+
* ์ด์ง„ํŠธ๋ฆฌ ๋งŒ๋“ค๊ธฐ
16+
* ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณต์žก๋„:
17+
* - ์‹œ๊ฐ„๋ณต์žก๋„: O(n^2)
18+
* - ๊ณต๊ฐ„๋ณต์žก๋„: O(n^2)
19+
*/
20+
function buildTree(preorder: number[], inorder: number[]): TreeNode | null {
21+
// ์ „์œ„ ์ˆœํšŒ(preorder): ์ตœ์ƒ์œ„ ๋…ธ๋“œ -> ์ขŒ์ธก ์„œ๋ธŒํŠธ๋ฆฌ -> ์šฐ์ธก ์„œ๋ธŒํŠธ๋ฆฌ
22+
// ์ค‘์œ„ ์ˆœํšŒ(inorder): ์ขŒ์ธก ์„œ๋ธŒํŠธ๋ฆฌ -> ์ตœ์ƒ์œ„ ๋…ธ๋“œ -> ์šฐ์ธก ์„œ๋ธŒํŠธ๋ฆฌ
23+
24+
// ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด์ด ๋น„์—ˆ์„๋•Œ null์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์ข…๋ฃŒ์‹œํ‚ด
25+
if (preorder.length === 0 || inorder.length === 0) {
26+
return null
27+
}
28+
29+
let root = preorder[0]
30+
let mid = inorder.findIndex((value) => value === root)
31+
32+
let leftInorder = inorder.slice(0, mid)
33+
let rightInorder = inorder.slice(mid+1)
34+
35+
let leftPreorder = preorder.slice(1, 1 + leftInorder.length)
36+
let rightPreorder = preorder.slice(1 + leftInorder.length)
37+
38+
let left = buildTree(leftPreorder, leftInorder)
39+
let right = buildTree(rightPreorder, rightInorder)
40+
41+
return new TreeNode(root, left, right)
42+
}

0 commit comments

Comments
ย (0)