/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<TreeNode> generateTrees(int n) {
List<TreeNode> res=new ArrayList<TreeNode>();
if(n==0){
return res;
}
res=subTrees(1,n);
return res;
}
public List<TreeNode> subTrees(int start,int end){
List<TreeNode> listTree=new ArrayList<TreeNode>(); //每一次调用这个函数都会新创建一个list,保存子树,包括左子树和右子树
List<TreeNode> leftTree;
List<TreeNode> rightTree;
if(start>end){
listTree.add(null);//为子树添加节点,与循环体中的listTree不是一个
return listTree;
}
if(start==end){
listTree.add(new TreeNode(start));//为子树添加节点
return listTree;
}
for(int i=start;i<=end;i++){
leftTree=subTrees(start,i-1);
rightTree=subTrees(i+1,end);
for(TreeNode lnode:leftTree){
for(TreeNode rnode:rightTree){
TreeNode root=new TreeNode(i);
root.left=lnode;
root.right=rnode;
listTree.add(root); //list存的是子树的根节点
}
}
}
return listTree;
}
}
//整体结构 一个list保存树的根节点,根节点的左右指针(left和right)指向左右list,分别保存左右子树的根节点
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<TreeNode> generateTrees(int n) {
List<TreeNode> res=new ArrayList<TreeNode>();
if(n==0){
return res;
}
res=subTrees(1,n);
return res;
}
public List<TreeNode> subTrees(int start,int end){
List<TreeNode> listTree=new ArrayList<TreeNode>(); //每一次调用这个函数都会新创建一个list,保存子树,包括左子树和右子树
List<TreeNode> leftTree;
List<TreeNode> rightTree;
if(start>end){
listTree.add(null);//为子树添加节点,与循环体中的listTree不是一个
return listTree;
}
if(start==end){
listTree.add(new TreeNode(start));//为子树添加节点
return listTree;
}
for(int i=start;i<=end;i++){
leftTree=subTrees(start,i-1);
rightTree=subTrees(i+1,end);
for(TreeNode lnode:leftTree){
for(TreeNode rnode:rightTree){
TreeNode root=new TreeNode(i);
root.left=lnode;
root.right=rnode;
listTree.add(root); //list存的是子树的根节点
}
}
}
return listTree;
}
}
//整体结构 一个list保存树的根节点,根节点的左右指针(left和right)指向左右list,分别保存左右子树的根节点