File tree Expand file tree Collapse file tree 4 files changed +126
-0
lines changed Expand file tree Collapse file tree 4 files changed +126
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * Definition for a binary tree node.
3+ * function TreeNode(val, left, right) {
4+ * this.val = (val===undefined ? 0 : val)
5+ * this.left = (left===undefined ? null : left)
6+ * this.right = (right===undefined ? null : right)
7+ * }
8+ */
9+ /**
10+ * @param {TreeNode } root
11+ * @param {number } k
12+ * @return {number }
13+ */
14+ var kthSmallest = function ( root , k ) {
15+ let count = 0
16+ let finded
17+
18+ let dfs = ( node ) => {
19+ if ( ! node ) {
20+ return
21+ }
22+ dfs ( node . left )
23+ count ++
24+ if ( count === k ) {
25+ finded = node . val
26+ return
27+ }
28+ dfs ( node . right )
29+ }
30+
31+ dfs ( root )
32+
33+ return finded
34+ }
Original file line number Diff line number Diff line change 1+ let minDepth = function ( root ) {
2+ if ( ! root ) return 0
3+
4+ let depth = 0
5+ let queue = [ root ]
6+
7+ while ( queue . length ) {
8+ depth ++
9+ let len = queue . length
10+ while ( len -- ) {
11+ let node = queue . shift ( )
12+
13+ let left = node . left
14+ let right = node . right
15+ if ( ! left && ! right ) {
16+ return depth
17+ }
18+
19+ if ( left ) {
20+ queue . push ( left )
21+ }
22+ if ( right ) {
23+ queue . push ( right )
24+ }
25+ }
26+ }
27+ }
Original file line number Diff line number Diff line change 1+ let deleteNode = function ( root , key ) {
2+ let findNodePos = ( node , key ) => {
3+ if ( ! node ) {
4+ return false
5+ }
6+ if ( node . left && node . left . val === key ) {
7+ return {
8+ parent : node ,
9+ pos : "left" ,
10+ }
11+ } else if ( node . right && node . right . val === key ) {
12+ return {
13+ parent : node ,
14+ pos : "right" ,
15+ }
16+ } else {
17+ return findNodePos ( node . left , key ) || findNodePos ( node . right , key )
18+ }
19+ }
20+
21+ let findLastLeft = ( node ) => {
22+ if ( ! node . left ) {
23+ return node
24+ }
25+ return findLastLeft ( node . left )
26+ }
27+
28+ let virtual = new TreeNode ( )
29+ virtual . left = root
30+
31+ let finded = findNodePos ( virtual , key )
32+ if ( finded ) {
33+ let { parent, pos } = finded
34+ let target = parent [ pos ]
35+ let targetLeft = target . left
36+ let targetRight = target . right
37+
38+ if ( ! targetLeft && ! targetRight ) {
39+ parent [ pos ] = null
40+ } else if ( ! targetRight ) {
41+ parent [ pos ] = targetLeft
42+ } else if ( ! targetLeft ) {
43+ parent [ pos ] = targetRight
44+ } else {
45+ parent [ pos ] = targetRight
46+ let lastLeft = findLastLeft ( targetRight )
47+ lastLeft . left = targetLeft
48+ }
49+ }
50+
51+ return virtual . left
52+ }
Original file line number Diff line number Diff line change 1+ let sortedArrayToBST = function ( nums ) {
2+ let n = nums . length
3+ if ( ! n ) {
4+ return null
5+ }
6+ let mid = Math . floor ( n / 2 )
7+ let root = new TreeNode ( nums [ mid ] )
8+
9+ root . left = sortedArrayToBST ( nums . slice ( 0 , mid ) )
10+ root . right = sortedArrayToBST ( nums . slice ( mid + 1 , n ) )
11+
12+ return root
13+ } ;
You can’t perform that action at this time.
0 commit comments