给定一个值n,能构建出多少不同的值包含1...n的二叉搜索树(BST)https://blog.csdn.net/zy854816286/article/details/104820348
若要输出所有的二叉搜索树结构,则依次考虑以1为根节点,以2为根节点...直到以n为根节点。
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; left = null; right = null; }
* }
*/
import java.util.*;
public class Solution {
public ArrayList<TreeNode> generateTrees(int n) {
return BST(1,n);
}
public ArrayList<TreeNode> BST(int start,int end){
ArrayList<TreeNode> result=new ArrayList<TreeNode>();
if(start>end){
result.add(null);
return result;
}
int i,j;
for(i=start;i<=end;i++){
ArrayList<TreeNode> left=BST(start,i-1);
ArrayList<TreeNode> right=BST(i+1,end);
for(int m=0;m<left.size();m++){
for(int n=0;n<right.size();n++){
TreeNode temp=new TreeNode(i);
temp.left=left.get(m);
temp.right=right.get(n);
result.add(temp);
}
}
}
return result;
}
}