Skip to content

Commit 457f858

Browse files
authored
Create maximum-difference-between-node-and-ancestor.py
1 parent 74321da commit 457f858

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Time: O(n)
2+
# Space: O(h)
3+
4+
# Definition for a binary tree node.
5+
class TreeNode(object):
6+
def __init__(self, x):
7+
self.val = x
8+
self.left = None
9+
self.right = None
10+
11+
12+
# iterative stack solution
13+
class Solution(object):
14+
def maxAncestorDiff(self, root):
15+
"""
16+
:type root: TreeNode
17+
:rtype: int
18+
"""
19+
result = 0
20+
stack = [(root, 0, float("inf"))]
21+
while len(stack) > 0:
22+
node, mx, mn = stack.pop()
23+
if not node:
24+
continue
25+
result = max(result, mx-node.val, node.val-mn)
26+
mx = max(mx, node.val)
27+
mn = min(mn, node.val)
28+
stack.append((node.left, mx, mn))
29+
stack.append((node.right, mx, mn))
30+
return result
31+
32+
33+
# Time: O(n)
34+
# Space: O(h)
35+
# recursive solution
36+
class Solution2(object):
37+
def maxAncestorDiff(self, root):
38+
"""
39+
:type root: TreeNode
40+
:rtype: int
41+
"""
42+
def maxAncestorDiffHelper(node, mx, mn):
43+
if not node:
44+
return 0
45+
result = max(mx-node.val, node.val-mn)
46+
mx = max(mx, node.val)
47+
mn = min(mn, node.val)
48+
result = max(result, maxAncestorDiffHelper(node.left, mx, mn))
49+
result = max(result, maxAncestorDiffHelper(node.right, mx, mn))
50+
return result
51+
52+
return maxAncestorDiffHelper(root, 0, float("inf"))

0 commit comments

Comments
 (0)