4.9w+
社区成员
public ArrayList<TreeNode> generateTrees(int n) {
return generateTrees(1, n);//从1作为root开始,到n作为root结束
}
private ArrayList<TreeNode> generateTrees(int left, int right){
ArrayList<TreeNode> res = new ArrayList<TreeNode>();
if (left > right){
res.add(null); //为什么这里要加个null 有什么意义?
return res;
}
for (int i = left; i <= right; i++){
ArrayList<TreeNode> lefts = generateTrees(left, i-1);
ArrayList<TreeNode> rights = generateTrees(i+1, right);
for (int j = 0; j < lefts.size(); j++){ //为什么这个循环可以把结果都表达出来?
for (int k = 0; k < rights.size(); k++){
TreeNode root = new TreeNode(i);
root.left = lefts.get(j);
root.right = rights.get(k); //这里只是添加了 一个根节点的左孩子节点和右孩子节点,那孩子节点下面的子孙节点呢?
res.add(root); //接上面的问题 ,只是加了根节点,接下来的节点都可以表示了么?
}
}
}
return res;
}