Skip to content

Commit 1f8a553

Browse files
committed
💀✅ [297] asjDLKJDSJLKAJLSKDLJDKSAALJKSSK
1 parent bff7ce1 commit 1f8a553

File tree

2 files changed

+158
-179
lines changed

2 files changed

+158
-179
lines changed

297/my_solution.js

+140-116
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,58 @@
11
class TreeNode {
22
constructor(val, left, right) {
3-
this.val = (val === undefined ? 0 : val);
3+
this.val = (val === undefined ? null : val);
44
this.left = (left === undefined ? null : left);
55
this.right = (right === undefined ? null : right);
66
}
77
}
8-
8+
const NULL_KEY = "x";
99
/**
1010
* Encodes a tree to a single string.
1111
*
1212
* @param {TreeNode} root
1313
* @return {string}
1414
*/
1515
var serialize = function (root) {
16-
let storeList = [[], []], stack = [];
17-
18-
// nlr
19-
const preorder = (node) => {
20-
if (node === null) return;
21-
// console.log("node")
22-
// console.log(node)
23-
// console.log(storeList)
24-
storeList[0].push(node.val);
25-
26-
if (node.left !== null) {
27-
if (node.right !== null) {
28-
stack.push(node.right);
29-
}
30-
let tmp = node.left;
31-
preorder(tmp);
32-
} else {
33-
if (node.right !== null) {
34-
let tmp = node.right;
35-
preorder(tmp);
36-
} else if (stack.length > 0) {
37-
let parent = stack.pop();
38-
console.log("parent")
39-
console.log(parent)
40-
preorder(parent);
41-
}
42-
}
43-
}
44-
45-
console.log("root")
46-
console.log(root)
47-
preorder(root);
48-
console.log("________________________________")
49-
50-
// lnr
51-
stack = [];
52-
const inorder = (node) => {
53-
if (node === null) return;
54-
55-
console.log(`curr:${node.val}`)
56-
if (node.left !== null) {
57-
stack.push(node);
58-
inorder(node.left);
59-
} else {
60-
storeList[1].push(node.val);
61-
if (node.right !== null) {
62-
inorder(node.right)
63-
} else if (stack.length > 0) {
64-
// storeList[1].push(node.val);
65-
let parent = stack.pop();
66-
67-
console.log("stack")
68-
console.log(stack)
69-
console.log("parent")
70-
console.log(parent)
71-
parent.left = null;
72-
inorder(parent);
73-
}
74-
}
75-
}
76-
77-
inorder(root);
78-
console.log("stack")
79-
console.log(stack)
80-
81-
console.log(storeList);
82-
16+
if (root === null) return NULL_KEY;
17+
// let storeList = [], stack = [];
18+
//
19+
// // nlr
20+
// const preorder = (node) => {
21+
// storeList.push(node.val);
22+
//
23+
// if (node.left !== null) {
24+
// if (node.right !== null) {
25+
// stack.push(node.right);
26+
// }
27+
// let tmp = node.left;
28+
// preorder(tmp);
29+
// } else {
30+
// storeList.push(NULL_KEY);
31+
//
32+
// if (node.right !== null) {
33+
// let tmp = node.right;
34+
// preorder(tmp);
35+
// } else {
36+
// storeList.push(NULL_KEY);
37+
// if (stack.length > 0) {
38+
// let parent = stack.pop();
39+
// preorder(parent);
40+
// }
41+
// }
42+
// }
43+
// }
44+
//
45+
// console.log("root")
46+
// console.log(root)
47+
// preorder(root);
48+
// console.log(storeList);
49+
50+
let l = serialize(root.left),
51+
r = serialize(root.right);
52+
53+
54+
55+
return root.val + "," + l + "," + r;
8356
return JSON.stringify(storeList);
8457
};
8558

@@ -90,64 +63,113 @@ var serialize = function (root) {
9063
* @return {TreeNode}
9164
*/
9265
var deserialize = function (data) {
93-
let deserialisedTree = new TreeNode();
94-
let [preorder, inorder] = JSON.parse(data);
95-
console.log("parsedData")
96-
// start w pre
97-
// pre: [4, 2, 1, 5, 3]
98-
// in: [1, 2, 3, 4, 5]
99-
console.log("pre:" + preorder)
100-
console.log("in:" + inorder)
101-
102-
103-
const constructTree = (po, io) => {
104-
105-
console.log("po:" + po)
106-
console.log("io:" + io)
107-
let curr = po[0], inorderIdx = io.indexOf(curr);
108-
109-
console.log(`1idx:${inorderIdx}`)
110-
if (io.filter(item => item === curr).length > 1) inorderIdx = io.indexOf(curr, inorderIdx + 1);
111-
// if (inorderIdx === 0 && io.length > 1) inorderIdx = io.indexOf(curr, inorderIdx + 1);
112-
console.log(`2idx:${inorderIdx}`)
113-
if (inorderIdx === -1) return null;
114-
// deserialisedTree.val = curr; // idx
115-
let tmpPo = [...po];
116-
let tmpIo = [...io];
117-
// console.log("l")
118-
// console.log(po.splice(1, inorderIdx)) // exclusive
119-
// console.log(io.splice(0, inorderIdx))
120-
// console.log("r")
121-
// console.log(tmpPo.splice(inorderIdx + 1, tmpPo.length - 1))
122-
// console.log(tmpIo.splice(inorderIdx + 1, tmpIo.length - 1))
123-
124-
return new TreeNode(curr,
125-
constructTree(po.splice(1, inorderIdx), io.splice(0, inorderIdx)),
126-
constructTree(tmpPo.splice(inorderIdx + 1, tmpPo.length - 1), tmpIo.splice(inorderIdx + 1, tmpIo.length - 1))
127-
)
128-
// return deserialisedTree;
129-
// deserialisedTree.right = constructTree(); // idx
130-
131-
// console.log("inorderIdx")
132-
// console.log(inorderIdx)
66+
67+
console.log("data");
68+
console.log(data);
69+
if (data === NULL_KEY) return null;
70+
let tree = new TreeNode(), list = data.split(",");
71+
console.log("list");
72+
console.log(list);
73+
74+
const buildTree = (node) => {
75+
76+
// console.log("nodeVal");
77+
// console.log(nodeVal);
78+
console.log("node");
79+
console.log(node);
80+
81+
// if (node === null) return null;
82+
if (node === null) node = new TreeNode();
83+
84+
85+
// if (list)
86+
let curr = list.shift();
87+
if (curr === NULL_KEY) return null;
88+
89+
node.val = parseInt(curr);
90+
node.left = buildTree(node.left)
91+
node.right = buildTree(node.right)
92+
// node.left = buildTree(node.left, list)
93+
// node.right = buildTree(node.right, list)
94+
// node.left = buildTree(node.left, list.shift())
95+
// node.right = buildTree(node.right, list.shift())
96+
// node.left = new TreeNode()
97+
// buildTree(node.left, list.shift())
98+
// node.right = new TreeNode()
99+
// buildTree(node.right, list.shift())
100+
101+
return node;
133102
}
134103

135-
console.log("deserialisedTree")
104+
buildTree(tree);
105+
// buildTree(tree, list.shift());
136106

137-
return constructTree(preorder, inorder);
107+
return tree;
138108
};
139109

140110
/**
141111
* Your functions will be called as such:
142112
* deserialize(serialize(root));
143113
*/
144-
114+
var serializeDFS = function (root) {
115+
const dfs = (node, str) => {
116+
if (node == null) {
117+
return str += "*,";
118+
} else {
119+
str += node.val + ",";
120+
str = dfs(node.left, str);
121+
str = dfs(node.right, str);
122+
}
123+
return str;
124+
}
125+
return dfs(root, "");
126+
};
127+
// 1,2,*,*,3,4,*,*,5,*,*,
128+
// serialise
129+
// [1,2,null,null,3,4,null,null,5,null,null,5,null,null,3,4,null,null,5,null,null,5,null,null]
145130
let x =
131+
//[4,-7,-3,
132+
//null,null,
133+
//-9,-3,
134+
// 9, -7,
135+
//-4, null,
136+
//6, null, -6, -6, null, null, 0, 6, 5, null, 9, null, null, -1, -4, null, null, null, -2]
146137
serialize(
147-
new TreeNode(1,
148-
null,
149-
new TreeNode(2)
150-
)
138+
139+
// new TreeNode(4,
140+
// new TreeNode(-7),
141+
// new TreeNode(-3,
142+
// new TreeNode(-9,
143+
// new TreeNode(9,
144+
// ),
145+
// new TreeNode(-7,
146+
// new TreeNode(-4,
147+
// new TreeNode(6,
148+
// new TreeNode(-6),
149+
// new TreeNode(-6)
150+
// )
151+
// ),
152+
// null
153+
// )
154+
// ),
155+
// new TreeNode(-3)
156+
// )
157+
// )
158+
159+
// new TreeNode(1,
160+
// new TreeNode(2),
161+
// new TreeNode(3,
162+
// new TreeNode(4),
163+
// new TreeNode(5)
164+
// )
165+
// )
166+
167+
null
168+
169+
// new TreeNode(1,
170+
// null,
171+
// new TreeNode(2)
172+
// )
151173

152174
// new TreeNode(3,
153175
// new TreeNode(2, new TreeNode(3)),
@@ -169,4 +191,6 @@ let x =
169191
)
170192

171193
console.log("serialise")
194+
console.log(x)
195+
console.log("deserialise")
172196
console.log(deserialize(x))

0 commit comments

Comments
 (0)