您的位置:首页 > 产品设计 > UI/UE

*LeetCode-Unique Binary Search Trees II

2015-09-25 04:47 381 查看
比第一个题要求高  不但要给出个数 是要给出所有可能的树

每次确定一个root 然后 (1,root -1)就是左子树 (root+1,n)就是右子树

注意边界条件 start > end的时候要返回一个list 里面是一个null node 而不能是一个null list 因为这种情况是这个树没有左子或者右子 然后就指向null

public class Solution {
public List<TreeNode> generateTrees(int n) {
return helper ( 1, n );
}
public List<TreeNode> helper ( int start, int end ){
List<TreeNode> res = new ArrayList<TreeNode>();
if ( start > end ){
res.add(null);
return res;
}

if ( start == end ){
TreeNode node = new TreeNode ( start );
res.add( node );
return res;
}
List<TreeNode> left, right;
for ( int i = start; i <= end; i ++ ){
left = helper(start, i - 1);
right = helper ( i + 1, end );
for ( TreeNode lroot : left ){
for ( TreeNode rroot : right ){
TreeNode root = new TreeNode ( i );
root.left = lroot;
root.right = rroot;
res.add( root );
}
}
}
return res;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: