Unique Binary Search Trees II (Java)

25 篇文章 0 订阅
21 篇文章 0 订阅

Given n, generate all structurally unique BST's (binary search trees) that store values 1...n.

For example,
Given n = 3, your program should return all 5 unique BST's shown below.

   1         3     3      2      1
    \       /     /      / \      \
     3     2     1      1   3      2
    /     /       \                 \
   2     1         2                 3
这道题拿到的时候没思路,参考了别人的代码,下次写注意下。

分别用1到n做root,递归遍历左右子树,将树的结构先连起来再将root存入list中

注意String这种类型的用在函数形参中,函数是void型的,是无法返回的,即使全局变量也不行,abc(String s)的String s相当于新初始化了。但是List可以


Source

    public List<TreeNode> generateTrees(int n) {
    	return generateTree(1, n); //以1做root开始到以n做root结束
    }
    
    public List<TreeNode> generateTree(int left, int right){
    	List<TreeNode> st = new ArrayList<TreeNode>();
    	if(left > right){
    		st.add(null);
    		return st;
    	}
    	
    	for(int i = left; i <= right; i++){
    		List<TreeNode> l = generateTree(left, i - 1);
    		List<TreeNode> r = generateTree(i + 1, right);
    		
    		for(int j = 0; j < l.size(); j++){
    			for(int k = 0; k < r.size(); k++){
    				TreeNode root = new TreeNode(i);
    				root.left = l.get(j);
    				root.right = r.get(k);
    				st.add(root);    //先将root的left,right连接好再将root放入返回list中
    			}
    		}
    	}
    	return st;
    }


Test

    public static void main(String[] args){
	    int n = 3;
	    List<TreeNode> a = new Solution().generateTrees(n);
	    
	    System.out.println(a);
	    
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值