Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf nodes.

public class Solution{
    public int run(TreeNode root){
        if(root == null)
            return 0;
        if(root.left == null && root.right == null)
            return 1;
        if(root.left == null)
            return run(root.right) + 1;
        if(root.right == null)
            return run(root.left) + 1;
        int left = run(root.left) + 1;
        int right = run(root.right) + 1;
        return Math.min(left , right);
    }
}

Evaluate the value of an arithmetic expression in Reverse Polish Notation.

Valid operators are+,-,*,/. Each operand may be an integer or another expression.

Some examples:

import java.util.Stack;
public class Solution {
    public int evalRPN(String[] tokens) {
        if(tokens == null || tokens.length == 0){
            return 0;
        }
        Stack<Integer> stack = new Stack<Integer>();
        for(int i = 0;i < tokens.length; i++){
            if(tokens[i].equals("+")){
                int num1 = stack.pop();
                int num2 = stack.pop();
                int res = num2 + num1;
                stack.push(res);
            }else if(tokens[i].equals("-")){
                int num1 = stack.pop();
                int num2 = stack.pop();
                int res = num2 - num1;
                stack.push(res);
            }else if(tokens[i].equals("*")){
                int num1 = stack.pop();
                int num2 = stack.pop();
                int res = num2 * num1;
                stack.push(res);
            }else if(tokens[i].equals("/")){
                int num1 = stack.pop();
                int num2 = stack.pop();
                int res = num2 / num1;
                stack.push(res);
            }else{int num = Integer.parseInt(tokens[i]);
            stack.push(num);
             }
        }
        return stack.size() == 1 ? stack.pop() : 0;
    }
}

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

/**
 * Definition for a point.
 * class Point {
 *     int x;
 *     int y;
 *     Point() { x = 0; y = 0; }
 *     Point(int a, int b) { x = a; y = b; }
 * }
 */
public class Solution {
    public int maxPoints(Point[] points) {
        if(points == null || points.length == 0 || points.length < 3){
            return points.length;
        }
        int res = 0;
        for(int i = 1;i < points.length;i++){
            int count = 0;
            long a = points[i].x;
            long b = points[i].y;
            long dx = a - points[i - 1].x;
            long dy = b - points[i - 1].y;
            if(dx == 0 && dy == 0){
                for(int j = 0;j < points.length;j++){
                    if(points[j].x == a && points[j].y == b){
                        count++;
                    }
                }
            }else{
                for(int j = 0;j < points.length;j++){
                    if((points[j].x - a)*dy == (points[j].y - b)*dx){
                        count++;
                    }
                }
            }
            res = Math.max(res , count);
        }
        return res;
    }
}