---
# System prepended metadata

title: 1628. Design an Expression Tree With Evaluate Function
tags: [Leetcode, Tree, Design, Medium]

---

# 1628. Design an Expression Tree With Evaluate Function
###### tags: `Leetcode` `Medium` `Design` `Tree`
Link: https://leetcode.com/problems/design-an-expression-tree-with-evaluate-function/description/
## Code
```java=
/**
 * This is the interface for the expression tree Node.
 * You should not remove it, and you can define some classes to implement it.
 */

abstract class Node {
    public abstract int evaluate();
    Node left;
    Node right;
    int val;
    String op = "";
};

class TreeNode extends Node {
    TreeNode(int val){
        this.val = val;
    }
    TreeNode(String op){
        this.op = op;
    }
    public int evaluate(){
        if(this.op.isEmpty()) return this.val;
        if(this.op.equals("+")) return left.evaluate()+right.evaluate();
        if(this.op.equals("-")) return left.evaluate()-right.evaluate();
        if(this.op.equals("*")) return left.evaluate()*right.evaluate();
        else return left.evaluate()/right.evaluate();
    }
}

/**
 * This is the TreeBuilder class.
 * You can treat it as the driver code that takes the postinfix input 
 * and returns the expression tree represnting it as a Node.
 */

class TreeBuilder {
    Node buildTree(String[] postfix) {
        Stack<TreeNode> stack = new Stack<>();
        for(String s:postfix){
            if(isOperator(s)){
                TreeNode right = stack.pop();
                TreeNode left = stack.pop();
                TreeNode op = new TreeNode(s);
                op.left = left;
                op.right = right;
                stack.push(op);
            }
            else stack.push(new TreeNode(Integer.parseInt(s)));
        }
        return stack.pop();
    }
    boolean isOperator(String s){
        return s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/");
    }
};


/**
 * Your TreeBuilder object will be instantiated and called as such:
 * TreeBuilder obj = new TreeBuilder();
 * Node expTree = obj.buildTree(postfix);
 * int ans = expTree.evaluate();
 */
```