Skip to content

Instantly share code, notes, and snippets.

@ssshukla26
Last active September 23, 2021 01:35
Show Gist options
  • Save ssshukla26/7a958a9f2571254c707b7771f0868efe to your computer and use it in GitHub Desktop.
Save ssshukla26/7a958a9f2571254c707b7771f0868efe to your computer and use it in GitHub Desktop.
Design an Expression Tree With Evaluate Function
from typing import List
class TreeNode(object):
def __init__(self, val):
self.val = val
self.left = None
self.right = None
return
def evaluate(self) -> int:
if self.val.isdigit():
return int(self.val)
elif self.val == "+":
return self.left.evaluate() + self.right.evaluate()
elif self.val == "-":
return self.left.evaluate() - self.right.evaluate()
elif self.val == "*":
return self.left.evaluate() * self.right.evaluate()
elif self.val == "/":
return self.left.evaluate() // self.right.evaluate()
else:
pass
class TreeBuilder(object):
@staticmethod
def build(postfix: List[str]) -> TreeNode:
stack = []
for token in postfix:
t = TreeNode(token)
if not token.isdigit():
t.right = stack.pop()
t.left = stack.pop()
stack.append(t)
return stack.pop()
t = TreeBuilder.build(["3","4","+","2","*","7","/"])
print(t.evaluate()) # 2
t = TreeBuilder.build(["4","5","2","7","+","-","*"])
print(t.evaluate()) # -16
t = TreeBuilder.build(["4","2","+","3","5","1","-","*","+"])
print(t.evaluate()) # 18
t = TreeBuilder.build(["100","200","+","2","/","5","*","7","+"])
print(t.evaluate()) # 757
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment