ArrayList<TreeNode> DFS(int s, int e) {
		ArrayList<TreeNode> subTrees = new ArrayList<TreeNode>();
		if (s > e) {
			subTrees.add(null);
			return subTrees;
		}
		for (int i = s; i <= e; ++i) {

			ArrayList<TreeNode> tmpTreesL = DFS(s, i - 1);
			ArrayList<TreeNode> tmpTreesR = DFS(i + 1, e);

			for (TreeNode treeL : tmpTreesL) {
				for (TreeNode treeR : tmpTreesR) {
					TreeNode node = new TreeNode(i);
					node.left = treeL;
					node.right = treeR;
					subTrees.add(node);
				}
			}

		}
		return subTrees;
	}