File tree 1 file changed +67
-0
lines changed
1 file changed +67
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Tree_Node :
2
+ def __init__ (self , val = 0 , left = None , right = None ):
3
+ self .val = val
4
+ self .left = left
5
+ self .right = right
6
+
7
+ class Solution :
8
+
9
+ # Time Complexity: O(N)
10
+ # Space Complexity: O(1)
11
+ def trimBST (self , root : TreeNode , L : int , R : int ) -> TreeNode :
12
+
13
+ # 1. Find a common parent
14
+ node = root
15
+ while node is not None :
16
+ if node .val > R :
17
+ node = node .left
18
+
19
+ elif node .val < L :
20
+ node = node .right
21
+
22
+ else :
23
+ break
24
+ root = node
25
+
26
+ # 2. Trim the left subtree
27
+ parent = root
28
+ node = root .left
29
+ while (node is not None ):
30
+ if node .val < L :
31
+ parent .left = node .right
32
+ node = node .right
33
+
34
+ else :
35
+ parent = node
36
+ node = node .left
37
+ parent .left = None
38
+
39
+ # 3. Trim the right subtree:
40
+ parent = root
41
+ node = root .right
42
+ while (node is not None ):
43
+ if node .val > R :
44
+ parent .right = node .left
45
+ node = node .left
46
+
47
+ else :
48
+ parent = node
49
+ node = node .right
50
+ parent .right = None
51
+
52
+ return root
53
+
54
+ def trimBST_recursive (self , root : TreeNode , L : int , R : int ) -> TreeNode :
55
+ if not root :
56
+ return None
57
+
58
+ elif root .val > R :
59
+ return self .trimBST (root .left , L , R )
60
+
61
+ elif root .val < L :
62
+ return self .trimBST (root .right , L , R )
63
+
64
+ root .left = self .trimBST (root .left , L , R )
65
+ root .right = self .trimBST (root .right , L , R )
66
+
67
+ return root
You can’t perform that action at this time.
0 commit comments