[LintCode] Epression Tree Build

Problem

The structure of Expression Tree is a binary tree to evaluate certain expressions.
All leaves of the Expression Tree have an number string value. All non-leaves of the Expression Tree have an operator string value.

Now, given an expression array, build the expression tree of this expression, return the root of this expression tree.

Clarification

See wiki:
Expression Tree

Example

For the expression (26-(23+7)/(1+2)) (which can be represented by ["2" "" "6" "-" "(" "23" "+" "7" ")" "/" "(" "1" "+" "2" ")"]).
The expression tree will be like

             [ - ]         /          \    [ * ]              [ / ]  /     \           /         \[ 2 ]  [ 6 ]      [ + ]        [ + ]                 /    \       /      \               [ 23 ][ 7 ] [ 1 ]   [ 2 ] .

After building the tree, you just need to return root node [-].

Note

Solution

class TreeNode {    public int val;    public String s;    public ExpressionTreeNode root;     public TreeNode(int val, String ss) {        this.val = val;        this.root = new ExpressionTreeNode(ss);    }}public class Solution {    int get(String a, Integer base) {        if (a.equals("+") || a.equals("-"))            return 1 + base;        if (a.equals("*") || a.equals("/"))            return 2 + base;        return Integer.MAX_VALUE;    }    public ExpressionTreeNode build(String[] expression) {        // write your code here        Stack stack = new Stack();        TreeNode root = null;        int val = 0;        Integer base = 0;        for (int i = 0; i  convertToRPN(vector &expression) {        stack st;        vector RPN;        int len = expression.size();        for (int i = 0; i = getLevel(c)) {                            RPN.push_back(st.top());                            st.pop();                    }                    st.push(c);                }            }        }        while (! st.empty()) {            RPN.push_back(st.top());            st.pop();        }        return RPN;    }    ExpressionTreeNode* build(vector &expression) {        // write your code here        vector RPN = convertToRPN(expression);        int len = RPN.size();        stack nodeStack;        for (int i = 0; i right = pRight;                    pNode->left = pLeft;                    nodeStack.push(pNode);            } else                nodeStack.push(pNode);        }               if (nodeStack.empty())            return NULL;        else            return nodeStack.top();     }};
public class Solution {    public boolean isOperator(String s) {        return s == "+" || s == "-" || s == "*" || s == "/";    }    public int getLevel(String s) {        if (s == "(") return 0;        if (s == "+" || s == "-") return 1;        if (s == "*" || s == "/") return 2;        return 3;    }    public ArrayList convert(String[] expression) {        Stack stack = new Stack();        ArrayList deq = new ArrayList();        int len = expression.length;        for (int i = 0; i = getLevel(s)) {                        deq.add(stack.peek());                        stack.pop();                    }                    stack.push(s);                }            }        }        while (!stack.isEmpty()) {            deq.add(stack.peek());            stack.pop();        }        return deq;    }    public ExpressionTreeNode build(String[] expression) {        ArrayList deq = convert(expression);        System.out.println(deq);        int len = deq.size();        Stack stack = new Stack();        for (int i = 0; i  op   = new Stack();        Stack data = new Stack();        for(int i=0;i='0')){                //System.out.println("get op "+ tmp);                switch(firstc){                    case '(':                        ExpressionTreeNode node = new ExpressionTreeNode(tmp);                        op.push(node);                        break;                    case '+':                    case '-':                        while(!op.isEmpty()&&op.peek().symbol.charAt(0)!='('){                            ExpressionTreeNode opnode = op.pop();                            ExpressionTreeNode data1 = data.pop();                            ExpressionTreeNode data2 = data.pop();                            opnode.left = data2;                            opnode.right = data1;                            data.push(opnode);                        }                        ExpressionTreeNode node2 = new ExpressionTreeNode(tmp);                        op.push(node2);                        break;                    case '*':                    case '/':                        while(!op.isEmpty()&&(op.peek().symbol.charAt(0)=='*'||op.peek().symbol.charAt(0)=='/')){                            ExpressionTreeNode opnode = op.pop();                            ExpressionTreeNode data1 = data.pop();                            ExpressionTreeNode data2 = data.pop();                            opnode.left = data2;                            opnode.right = data1;                            data.push(opnode);                        }                        ExpressionTreeNode node3 = new ExpressionTreeNode(tmp);                        op.push(node3);                        break;                    case ')':                        while(op.peek().symbol.charAt(0)!='('){                            ExpressionTreeNode opnode = op.pop();                            ExpressionTreeNode data1 = data.pop();                            ExpressionTreeNode data2 = data.pop();                            opnode.left = data2;                            opnode.right = data1;                            data.push(opnode);                        }                        op.pop();                }            }else{                //System.out.println("add data "+tmp);                ExpressionTreeNode data1 = new ExpressionTreeNode(tmp);                data.push(data1);            }        }        while(!op.isEmpty()){            ExpressionTreeNode opnode = op.pop();            ExpressionTreeNode data1 = data.pop();            ExpressionTreeNode data2 = data.pop();            opnode.left = data2;            opnode.right = data1;            data.push(opnode);        }        if(data.isEmpty()) return null;        return data.pop();    }}

关键字:java, stack


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部