LeetCode——不同的二叉搜尋樹 II
阿新 • • 發佈:2020-07-19
Q:給定一個整數 n,生成所有由 1 ... n 為節點所組成的 二叉搜尋樹 。
A:遞迴解決這個問題,分別把每個點作為root,然後把子樹連上去。
public List<TreeNode> generateTrees(int n) { if (n == 0) return new LinkedList<>(); return generate(1, n); } private List<TreeNode> generate(int start, int end) { List<TreeNode> alltrees = new LinkedList<>(); if (start > end) { alltrees.add(null); return alltrees; } for (int i = start; i <= end; i++) {//每個點作為根節點 List<TreeNode> leftTree = generate(start, i - 1);//所有可能的左子樹集合list List<TreeNode> rightTree = generate(i + 1, end);//所有可能的右子樹集合list for (TreeNode l : leftTree) { for (TreeNode r : rightTree) { TreeNode root = new TreeNode(i); root.left = l; root.right = r; alltrees.add(root); } } } return alltrees; }