关闭

Unique Binary Search Trees II

标签: javaleetcodetreebinary search trees
82人阅读 评论(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,大小为i,然后,将所有的数分成1-(i-1)和(i+1)-n两个子集合,然后再取得两个子集合得到的数,作为它的左子树和右子树即可。

在这里注意,如果左子树为空,就将右子树作为拼接,如果右子树为空,就将左子树拼接,只有两个都不为空的时候才能用双层for循环.

代码如下:

public class Solution {
    public List<TreeNode> generateTrees(int n) {
        return getArrayList(1, n);
    }
	
	public List<TreeNode> getArrayList(int left,int right){
		List<TreeNode> result=new ArrayList<TreeNode>();
		if(left>right)
			return result;
		if(left==right){
			result.add(new TreeNode(left));
			return result;
		}
		for(int i=left;i<=right;i++){
			List<TreeNode> leftList=getArrayList(left, i-1);
			List<TreeNode> rightList=getArrayList(i+1, right);
			if(leftList.size()==0){
				for(int j=0;j<rightList.size();j++){
					TreeNode root=new TreeNode(i);
					root.right=rightList.get(j);
					result.add(root);
				}
			}
			if(rightList.size()==0){
				for(int j=0;j<leftList.size();j++){
					TreeNode root=new TreeNode(i);
					root.left=leftList.get(j);
					result.add(root);
				}
			}
			for(int j=0;j<leftList.size();j++){
				for(int k=0;k<rightList.size();k++){
					TreeNode root=new TreeNode(i);
					root.left=leftList.get(j);
					root.right=rightList.get(k);
					result.add(root);
				}
			}
		}
		return result;
	}
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38604次
    • 积分:2476
    • 等级:
    • 排名:第14854名
    • 原创:215篇
    • 转载:37篇
    • 译文:0篇
    • 评论:5条
    最新评论