LeetCode 95. 不同的二叉搜索樹 II 遞歸

題意:給一個整數n,求出1到n能夠構成的所有二叉樹
思路:可以用遞歸首先求出左子樹構成的列表和右子樹構成的列表,從1到n枚舉所有根節點,將每個左子樹和每個右子樹的根連到當前的根上,最底層可能是null,也可能只有一個節點,最頂層則是所要求的答案

class Solution {
    public List<TreeNode> generateTrees(int n) {
        if (n == 0)
            return new ArrayList<TreeNode>();
        return solve(1,n);
    }
    public List<TreeNode> solve(int start, int end) {
        List<TreeNode> res = new ArrayList<>();
        if (start > end) {
            res.add(null);
            return res;
        }
        for (int i = start; i <= end; i++) {
            List<TreeNode> llist = solve(start, i-1);
            List<TreeNode> rlist = solve(i+1, end);
            for (TreeNode l : llist) {
                for (TreeNode r : rlist) {
                    TreeNode cur = new TreeNode(i);
                    cur.left = l;
                    cur.right = r;
                    res.add(cur);
                }
            }
        }
        return res;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章