/**
* 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 createTree(1,n);
}
public ArrayList<TreeNode> createTree(int left,int right){
ArrayList<TreeNode> res=new ArrayList<TreeNode>();
if(left>right){
res.add(null);
return res;
}
for(int i=left;i<=right;i++){
//以i为根节点的树,其左子树由[1, i-1]构成, 其右子树由[i+1, n]构成。
//该原则建树具有唯一性
ArrayList<TreeNode> leftTree=createTree(left,i-1);
ArrayList<TreeNode> rightTree=createTree(i+1,right);
//每个左边的子树跟所有右边的子树匹配,
//而每个右边的子树也要跟所有的左边子树匹配,总共有左右子树数量的乘积种情况
for(int j=0;j<leftTree.size();j++){
for(int k=0;k<rightTree.size();k++){
TreeNode newNode=new TreeNode(i);
newNode.left=leftTree.get(j);
newNode.right=rightTree.get(k);
res.add(newNode);
}
}
}
return res;
}
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交