Skip to content

Commit 86e4ca9

Browse files
committed
feat: add "validate-binary-search-tree" solution
1 parent d86d2af commit 86e4ca9

File tree

1 file changed

+92
-5
lines changed

1 file changed

+92
-5
lines changed
Lines changed: 92 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,101 @@
11
"""
2-
Inputs:
2+
[๋ฌธ์ œํ’€์ด]
3+
# Inputs
4+
TreeNode ํด๋ž˜์Šค ๊ฐ์ฒด
35
4-
Outputs:
6+
# Outputs
7+
valid ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์ธ์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€
58
6-
Constraints:
9+
# Constraints
10+
The number of nodes in the tree is in the range [1, 104].
11+
-2^31 <= Node.val <= 2^31 - 1
712
8-
Time Complexity:
13+
# Ideas
14+
root ๋ฐฐ์—ด ๊ธธ์ด ๊ธฐ์ค€์œผ๋กœ ํ’€๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, root๋Š” ๋ฐฐ์—ด์ด ์•„๋‹Œ TreeNode ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์ด๋‹ค.
15+
1. bfs๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ
16+
ํŠธ๋ฆฌ ๋†’์ด ๊ธฐ์ค€์œผ๋กœ ํผ์ง€๋ฉด์„œ ํƒ์ƒ‰ํ•˜๋Š” ๋ชจ์–‘์ด๋ผ bfs ์„ ํƒ
17+
18+
cur = root
19+
q.append(cur)
20+
21+
while not q:
22+
cur_node = q.popleft()
23+
if cur_node == null:
24+
continue
25+
26+
if cur_node.right != null and (cur_node.left.val > cur_node.val or cur_node.right.val < cur_node.val):
27+
return False
28+
29+
else:
30+
q.append(cur_node.left)
31+
32+
๋จผ๊ฐ€ ์กฐ๊ฑด๋ฌธ์ด ๊ธธ์–ด์ง€๋Š” ๊ฒƒ ๊ฐ™์•„ ํšจ์œจ์ ์ธ ํ’€์ด๋Š” ์•„๋‹Œ ๊ฒƒ ๊ฐ™์ง€๋งŒ..์ผ๋‹จ ์‹œ๋„!
33+
34+
n์ด node ๊ฐœ์ˆ˜๋ผ๋ฉด
35+
Time: O(n), Space: O(n)
36+
37+
from collections import deque
38+
39+
class Solution:
40+
def isValidBST(self, root: Optional[TreeNode]) -> bool:
41+
q = deque([])
42+
q.append(root)
43+
44+
while q:
45+
cur_node = q.popleft()
46+
if cur_node is None:
47+
continue
48+
49+
if cur_node.left is not None and cur_node.left.val >= cur_node.val:
50+
return False
51+
52+
elif cur_node.right is not None and cur_node.right.val <= cur_node.val:
53+
return False
54+
55+
else:
56+
q.append(cur_node.left)
57+
q.append(cur_node.right)
58+
59+
return True
60+
61+
- ๋ฐ˜๋ก€ ๋ฐœ์ƒ
62+
root =
63+
[5,4,6,null,null,3,7]
64+
65+
์™œ BST๊ฐ€ ์•„๋‹Œ์ง€ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ„๋‹ค..
66+
-> 3์ด 5๋ณด๋‹ค ์ž‘์•„์„œ ๊ทธ๋ ‡๋‹ค
67+
๋ฃจํŠธ ๊ธฐ์ค€ ์˜ค๋ฅธ์ชฝ์€ ์ž์‹ ๊ฐ’๋“ค๋„ ๋ฌด์กฐ๊ฑด ์ž‘์•„์•ผํ•œ๋‹ค.
68+
๊ทธ๋Ÿผ ํ•œ ๋‹จ๊ณ„ ์œ„์˜ ๊ฐ’๋งŒ ๋ณด๋ฉด ์•ˆ๋œ๋‹ค๋Š” ๊ฑด๋ฐ, ํƒ์ƒ‰ ๋ฐฉ๋ฒ• ๋ฐ”๊ฟ”์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค
69+
70+
2. ์žฌ๊ท€๋กœ ๋Œ๋ฉด์„œ, ์ด ๊ฐ’๋ณด๋‹ค๋Š” ์ปค์•ผํ•œ๋‹ค๋Š” ๋ฐฐ์—ด์„ ์ธ์ž๋กœ ํ•จ๊ป˜ ๋„˜๊ฒจ์ฃผ๊ธฐ?
71+
ํ•˜์ง€๋งŒ, ์–ด๋А dfs์—์„œ ๋ฐฐ์—ด ์›์†Œ๋“ค๋ณด๋‹ค ๋ณธ์ธ ๊ฐ’์ด ์ปค์•ผํ•˜๋Š”์ง€, ์ž‘์•ผํ•˜๋Š”์ง€ ๋ชจ๋ฆ„!!
72+
73+
๊ฒฐ๊ตญ ํ’€์ด ์ฐธ๊ณ 
74+
75+
[ํšŒ๊ณ ]
976
10-
Space Complexity:
1177
1278
"""
1379

80+
# Definition for a binary tree node.
81+
# class TreeNode:
82+
# def __init__(self, val=0, left=None, right=None):
83+
# self.val = val
84+
# self.left = left
85+
# self.right = right
86+
from collections import deque
87+
88+
class Solution:
89+
def isValidBST(self, root: Optional[TreeNode]) -> bool:
90+
ret = True
91+
92+
def dfs(node, low, high):
93+
if not node:
94+
return True
95+
96+
if not (low < node.val < high):
97+
return False
98+
99+
return dfs(node.left, low, node.val) and dfs(node.right, node.val, high)
14100

101+
return dfs(root, float("-inf"), float("inf"))

0 commit comments

Comments
ย (0)