Skip to content

Commit fa02a18

Browse files
committed
✨ [105] srsly gettin easier
1 parent 577cf1c commit fa02a18

File tree

2 files changed

+79
-26
lines changed

2 files changed

+79
-26
lines changed

105/my_solution.js

+33-26
Original file line numberDiff line numberDiff line change
@@ -14,59 +14,66 @@ class TreeNode {
1414
var buildTree = function (preorder, inorder) {
1515
let tree = new TreeNode()
1616

17-
const buildNode = (node, order) => {
17+
const buildNode = (node, order) => { // order = inorder
1818
// if (null === node) return;
1919
if (0 === order.length) return;
20-
let curr = order[0],
21-
tmpInorder = [...inorder],
22-
inIdx = tmpInorder.indexOf(curr),
23-
leftInorder = tmpInorder.splice(0, inIdx),
24-
rightInorder = tmpInorder.splice(inIdx, tmpInorder.length - 1);
20+
let curr = preorder.shift();
21+
22+
console.log("-> order.includes(curr)");
23+
console.log("curr");
24+
console.log(curr);
25+
console.log("order");
26+
console.log(order);
27+
console.log(order.includes(curr));
28+
if (!order.includes(curr)) return;
29+
30+
let
31+
tmpInorder1 = [...order],
32+
tmpInorder2 = [...order],
33+
inIdx = order.indexOf(curr),
34+
leftInorder = tmpInorder1.splice(0, inIdx),
35+
rightInorder = tmpInorder2.splice(inIdx + 1, tmpInorder2.length - 1);
2536

2637
console.log(`-> inIdx:${inIdx}, curr:${curr}, order:${order}`);
2738
console.log("from inorder:");
2839
console.log(leftInorder, rightInorder);
2940

3041
// last idx from inorder of the left side is the end of the left leaves in pre
31-
let tmpPreorder = [...order],
32-
lastPreIdx = order.indexOf(leftInorder[leftInorder.length - 1]),
33-
leftPreorder = tmpPreorder.splice(1, lastPreIdx),
34-
rightPreorder = tmpPreorder.splice(lastPreIdx, tmpPreorder.length - 1);
35-
console.log(">> PRE")
36-
console.log(leftPreorder, rightPreorder)
42+
// let tmpPreorder = [...order],
43+
// lastPreIdx = order.indexOf(leftInorder[leftInorder.length - 1]),
44+
// leftPreorder = tmpPreorder.splice(1, lastPreIdx),
45+
// rightPreorder = tmpPreorder.splice(lastPreIdx, tmpPreorder.length - 1);
46+
// console.log(">> PRE")
47+
// console.log(leftPreorder, rightPreorder)
3748

3849
node.val = curr;
3950
console.log("node")
4051
console.log(node)
4152

42-
43-
console.log(order);
4453
// if (inorder.indexOf(preorder[0]) < inIdx) {
4554
// console.log(`-> l ${inorder.indexOf(preorder[0])} < ${inIdx}`);
46-
if (leftPreorder.length > 0) {
47-
// // yes it is left leave
48-
node.left = new TreeNode(order[1]);
49-
console.log(`Adding ${order[1]} to left`)
50-
buildNode(node.left, leftPreorder);
55+
if (leftInorder.length > 0) {
56+
node.left = new TreeNode();
57+
console.log(`Adding left`)
58+
buildNode(node.left, leftInorder);
5159
}
5260

53-
if (rightPreorder.length > 0) {
54-
// console.log(`-> r ${inorder.indexOf(preorder[0])} > ${inIdx}`);
55-
console.log(`Adding ${order[lastPreIdx + 1]} to right`)
56-
node.right = new TreeNode(order[lastPreIdx + 1]);
57-
buildNode(node.right, rightPreorder);
61+
if (rightInorder.length > 0) {
62+
node.right = new TreeNode();
63+
buildNode(node.right, rightInorder);
5864
}
5965
}
6066

61-
buildNode(tree, [...preorder]);
67+
buildNode(tree, [...inorder]);
6268

6369
return tree;
6470
};
6571

6672
let x =
6773
// buildTree([3, 9, 20, 15, 7], [9, 3, 15, 20, 7])
6874
// buildTree([-1], [-1])
69-
buildTree([1, 2, 3], [3, 2, 1])
75+
// buildTree([1, 2, 3], [3, 2, 1])
76+
buildTree([1, 2], [1, 2])
7077
// buildTree([3, 9, 8, 6, 7, 20], [6, 8, 9, 7, 3, 20])
7178

7279
console.log("Result")

105/solution.js

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
class TreeNode {
2+
constructor(val, left, right) {
3+
this.val = (val === undefined ? 0 : val);
4+
this.left = (left === undefined ? null : left);
5+
this.right = (right === undefined ? null : right);
6+
}
7+
}
8+
9+
/**
10+
* @param {number[]} preorder
11+
* @param {number[]} inorder
12+
* @return {TreeNode}
13+
*/
14+
var buildTree = function (preorder, inorder) {
15+
let tree = new TreeNode()
16+
17+
const buildNode = (node, order) => {
18+
if (0 === order.length) return;
19+
let curr = preorder.shift();
20+
21+
if (!order.includes(curr)) return;
22+
23+
let
24+
tmpInorder1 = [...order],
25+
tmpInorder2 = [...order],
26+
inIdx = order.indexOf(curr),
27+
leftInorder = tmpInorder1.splice(0, inIdx),
28+
rightInorder = tmpInorder2.splice(inIdx + 1, tmpInorder2.length - 1);
29+
30+
node.val = curr;
31+
32+
if (leftInorder.length > 0) {
33+
node.left = new TreeNode();
34+
buildNode(node.left, leftInorder);
35+
}
36+
37+
if (rightInorder.length > 0) {
38+
node.right = new TreeNode();
39+
buildNode(node.right, rightInorder);
40+
}
41+
}
42+
43+
buildNode(tree, [...inorder]);
44+
45+
return tree;
46+
};

0 commit comments

Comments
 (0)