1. 程式人生 > >[LeetCode]Unique Binary Search Trees II

[LeetCode]Unique Binary Search Trees II

給定一個整數 n,生成所有由 1 … n 為節點所組成的二叉搜尋樹。

示例:

輸入: 3 輸出: [ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3] ] 解釋: 以上的輸出對應以下 5 種不同結構的二叉搜尋樹:

在這裡插入圖片描述 使用自底向上的方式進行構建,且分成左右子樹分別構建,注意當min > max時,應該在res中加入null,程式碼如下:

class Solution {
    public List<TreeNode> generateTrees(int n) {
	       if (n < 1)
	    	   return new ArrayList<TreeNode>();
	       return helper(1,n);
	    }
	 public List<TreeNode> helper(int min, int max) {
		 List<TreeNode> res = new ArrayList<TreeNode>();
		 if (min > max) {
			 res.add(null);
			 return res;
		 }
		 for (int i = min; i <= max; i++) {
			 List<TreeNode> lres = helper(min,i-1);
			 List<TreeNode> rres = helper(i+1,max);
			 for (TreeNode left : lres) {
				 for (TreeNode right : rres) {
					 TreeNode root = new TreeNode(i);
					 root.left = left;
					 root.right = right;
					 res.add(root);
				 }
			 }
		 }
			 return res;
	 }
}