File tree Expand file tree Collapse file tree 3 files changed +91
-5
lines changed Expand file tree Collapse file tree 3 files changed +91
-5
lines changed Original file line number Diff line number Diff line change 11class TreeNode {
2- constructor ( val ) {
3- this . val = val
4- this . left = null
5- this . right = null
6- }
2+ constructor ( val ) {
3+ this . val = val
4+ this . left = null
5+ this . right = null
6+ }
77}
88
99module . exports = TreeNode
Original file line number Diff line number Diff line change 1+ const TreeNode = require ( "../工具/二叉树" )
2+
3+ /**
4+ * @param {TreeNode } root
5+ * @return {number[] }
6+ */
7+ let preorderTraversal = function ( root ) {
8+ let res = [ ]
9+ let stack = [
10+ {
11+ type : "go" ,
12+ node : root ,
13+ } ,
14+ ]
15+
16+ while ( stack . length ) {
17+ let { type, node } = stack . pop ( )
18+
19+ if ( ! node ) continue
20+
21+ if ( type === "print" ) {
22+ res . push ( node . val )
23+ }
24+
25+ if ( type === "go" ) {
26+ stack . push ( { type : "print" , node } )
27+
28+ if ( node . right ) {
29+ stack . push ( { type : "go" , node : node . right } )
30+ }
31+
32+ if ( node . left ) {
33+ stack . push ( { type : "go" , node : node . left } )
34+ }
35+ }
36+ }
37+
38+ return res
39+ }
40+
41+ const tree = new TreeNode ( 1 )
42+ tree . left = new TreeNode ( 4 )
43+ tree . left . left = new TreeNode ( 5 )
44+ tree . right = new TreeNode ( 6 )
45+ tree . right . right = new TreeNode ( 7 )
46+
47+ console . log ( preorderTraversal ( tree ) )
Original file line number Diff line number Diff line change 1+ const TreeNode = require ( "../工具/二叉树" )
2+
3+ let levelOrder = function ( root ) {
4+ let queue = [ root ]
5+ let res = [ ]
6+ if ( ! root ) return res
7+ let level = 0
8+ while ( queue . length ) {
9+ level ++
10+ let subRes = [ ]
11+ let len = queue . length
12+ let shouldReverse = level % 2 === 0
13+
14+ for ( let i = 0 ; i < len ; i ++ ) {
15+ let node = queue . shift ( )
16+ subRes . push ( node . val )
17+ if ( node . left ) {
18+ queue . push ( node . left )
19+ }
20+ if ( node . right ) {
21+ queue . push ( node . right )
22+ }
23+ }
24+ // 偶数行 把结果子数组reverse即可
25+ if ( shouldReverse ) {
26+ subRes . reverse ( )
27+ }
28+ res . push ( subRes )
29+ }
30+ return res
31+ }
32+
33+ let tree = new TreeNode ( 1 )
34+ tree . left = new TreeNode ( 2 )
35+ tree . left . left = new TreeNode ( 4 )
36+ tree . right = new TreeNode ( 3 )
37+ tree . right . right = new TreeNode ( 5 )
38+
39+ console . log ( levelOrder ( tree ) )
You can’t perform that action at this time.
0 commit comments