给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。
这道题是不同的二叉搜索树 I的进阶版本,I可以同过卡塔兰数直接抽象出答案,但是本题必须将构建的树具体保存。
var generateTrees = function(n) {
if(n==0) return [];//考虑为0的情况,防止返回[[]]
let arr=[];
for(let i=1;i<=n;i++){
arr.push(i);
}
function fun(array){
let ans=[];
if(!array.length){//当数组为空,只能用null赋值
ans.push(null);
return ans;
}
for(let i=0;i<array.length;i++){
let node=new TreeNode(array[i]);
let arr1=array.slice(0,i);//获取左数组
let arr2=array.slice(i+1);
let l=fun(arr1);//获取左数组产生的左子树集合
let r=fun(arr2);
for(let j=0;j<l.length;j++){
for(let k=0;k<r.length;k++){
let _node=JSON.parse(JSON.stringify(node));//深拷贝
_node.left=l[j];
_node.right=r[k];
ans.push(_node);//压入集合
}
}
}
return ans;
}
return fun(arr);
};
本文介绍了一种通过递归方式生成由1至n为节点的所有可能二叉搜索树的方法,利用深度优先搜索策略,实现对不同子树组合的遍历与构造。
922

被折叠的 条评论
为什么被折叠?



