File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Expand file tree Collapse file tree 1 file changed +52
-0
lines changed 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+ }
You can’t perform that action at this time.
0 commit comments