public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();

        if (root == null) {
            return result;
        }
        ArrayList<TreeNode> levelNode = new ArrayList<TreeNode>();
        levelNode.add(root);
        while (!levelNode.isEmpty()) {
            ArrayList<Integer> rr = new ArrayList<Integer>();
            for (TreeNode t : levelNode) {
                rr.add(t.val);
            }
            result.add(rr);

            int originalSize = levelNode.size();

            for (int i = 0; i < originalSize; i++) {
                if (levelNode.get(i).left != null) {
                    levelNode.add(levelNode.get(i).left);
                }
                if (levelNode.get(i).right != null) {
                    levelNode.add(levelNode.get(i).right);
                }
            }
            for (int i = 0; i < originalSize; i++) {
                levelNode.remove(0);
            }


        }

        return result;

    }