@@ -14,59 +14,66 @@ class TreeNode {
14
14
var buildTree = function ( preorder , inorder ) {
15
15
let tree = new TreeNode ( )
16
16
17
- const buildNode = ( node , order ) => {
17
+ const buildNode = ( node , order ) => { // order = inorder
18
18
// if (null === node) return;
19
19
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 ) ;
25
36
26
37
console . log ( `-> inIdx:${ inIdx } , curr:${ curr } , order:${ order } ` ) ;
27
38
console . log ( "from inorder:" ) ;
28
39
console . log ( leftInorder , rightInorder ) ;
29
40
30
41
// 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)
37
48
38
49
node . val = curr ;
39
50
console . log ( "node" )
40
51
console . log ( node )
41
52
42
-
43
- console . log ( order ) ;
44
53
// if (inorder.indexOf(preorder[0]) < inIdx) {
45
54
// 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 ) ;
51
59
}
52
60
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 ) ;
58
64
}
59
65
}
60
66
61
- buildNode ( tree , [ ...preorder ] ) ;
67
+ buildNode ( tree , [ ...inorder ] ) ;
62
68
63
69
return tree ;
64
70
} ;
65
71
66
72
let x =
67
73
// buildTree([3, 9, 20, 15, 7], [9, 3, 15, 20, 7])
68
74
// 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 ] )
70
77
// buildTree([3, 9, 8, 6, 7, 20], [6, 8, 9, 7, 3, 20])
71
78
72
79
console . log ( "Result" )
0 commit comments