1
1
class TreeNode {
2
2
constructor ( val , left , right ) {
3
- this . val = ( val === undefined ? 0 : val ) ;
3
+ this . val = ( val === undefined ? null : val ) ;
4
4
this . left = ( left === undefined ? null : left ) ;
5
5
this . right = ( right === undefined ? null : right ) ;
6
6
}
7
7
}
8
-
8
+ const NULL_KEY = "x" ;
9
9
/**
10
10
* Encodes a tree to a single string.
11
11
*
12
12
* @param {TreeNode } root
13
13
* @return {string }
14
14
*/
15
15
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 ;
83
56
return JSON . stringify ( storeList ) ;
84
57
} ;
85
58
@@ -90,64 +63,113 @@ var serialize = function (root) {
90
63
* @return {TreeNode }
91
64
*/
92
65
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 ;
133
102
}
134
103
135
- console . log ( "deserialisedTree" )
104
+ buildTree ( tree ) ;
105
+ // buildTree(tree, list.shift());
136
106
137
- return constructTree ( preorder , inorder ) ;
107
+ return tree ;
138
108
} ;
139
109
140
110
/**
141
111
* Your functions will be called as such:
142
112
* deserialize(serialize(root));
143
113
*/
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]
145
130
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]
146
137
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
+ // )
151
173
152
174
// new TreeNode(3,
153
175
// new TreeNode(2, new TreeNode(3)),
@@ -169,4 +191,6 @@ let x =
169
191
)
170
192
171
193
console . log ( "serialise" )
194
+ console . log ( x )
195
+ console . log ( "deserialise" )
172
196
console . log ( deserialize ( x ) )
0 commit comments