Skip to content

Commit 8d34527

Browse files
authored
Create evaluate-boolean-binary-tree.py
1 parent 1f53c01 commit 8d34527

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# Time: O(n)
2+
# Space: O(h)
3+
4+
class TreeNode(object):
5+
def __init__(self, val=0, left=None, right=None):
6+
pass
7+
8+
9+
# dfs with stack
10+
class Solution(object):
11+
def evaluateTree(self, root):
12+
"""
13+
:type root: Optional[TreeNode]
14+
:rtype: bool
15+
"""
16+
INF = float("inf")
17+
OP = {
18+
2: lambda x, y: x or y,
19+
3: lambda x, y: x and y
20+
}
21+
22+
def iter_dfs(root):
23+
ret = [0]
24+
stk = [(1, (root, ret))]
25+
while stk:
26+
step, args = stk.pop()
27+
if step == 1:
28+
node, ret = args
29+
if node.left == node.right:
30+
ret[0] = node.val
31+
continue
32+
ret1, ret2 = [0], [0]
33+
stk.append((2, (node, ret1, ret2, ret)))
34+
stk.append((1, (node.right, ret2)))
35+
stk.append((1, (node.left, ret1)))
36+
elif step == 2:
37+
node, ret1, ret2, ret = args
38+
ret[0] = OP[node.val](ret1[0], ret2[0])
39+
return ret[0]
40+
41+
return iter_dfs(root)
42+
43+
44+
# Time: O(n)
45+
# Space: O(h)
46+
# dfs with recursion
47+
class Solution2(object):
48+
def evaluateTree(self, root):
49+
"""
50+
:type root: Optional[TreeNode]
51+
:rtype: bool
52+
"""
53+
INF = float("inf")
54+
OP = {
55+
2: lambda x, y: x or y,
56+
3: lambda x, y: x and y,
57+
}
58+
59+
def dfs(node):
60+
if node.left == node.right:
61+
return node.val
62+
return OP[node.val](dfs(node.left), dfs(node.right))
63+
64+
return dfs(root)

0 commit comments

Comments
 (0)