Skip to content

Commit f7fbfdb

Browse files
author
Hamid Gasmi
committed
#221 is completed
1 parent 3b09300 commit f7fbfdb

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

09-problems/lc_669_tree_bst.py

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
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

0 commit comments

Comments
 (0)