Skip to content

Instantly share code, notes, and snippets.

@dionyziz
Created January 8, 2020 17:41
Show Gist options
  • Save dionyziz/4c49dae13a62fa196aa439e7d698ac69 to your computer and use it in GitHub Desktop.
Save dionyziz/4c49dae13a62fa196aa439e7d698ac69 to your computer and use it in GitHub Desktop.
import operator
from functools import partial
class Node:
def __init__(self, val, left, right):
self.val = val
self.left = left
self.right = right
def lfilter(f, node):
if not node:
return node
if not f(node.val):
return lfilter(f, node.right)
return Node(node.val, lfilter(f, node.left), lfilter(f, node.right))
def rfilter(f, node):
if not node:
return node
if not f(node.val):
return rfilter(f, node.left)
return Node(node.val, rfilter(f, node.left), rfilter(f, node.right))
def reduce(f, node, acc):
if not node:
return acc
return reduce(f, node.left, f(node.val, reduce(f, node.right, acc)))
def rangeSumBST(root, L, R):
return reduce(operator.add,
rfilter(partial(operator.ge, R),
lfilter(partial(operator.le, L), root)),
0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment