[LeetCode]Unique Binary Search Trees II
阿新 • • 發佈:2018-12-17
給定一個整數 n,生成所有由 1 … n 為節點所組成的二叉搜尋樹。
示例:
輸入: 3 輸出: [ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3] ] 解釋: 以上的輸出對應以下 5 種不同結構的二叉搜尋樹:
使用自底向上的方式進行構建,且分成左右子樹分別構建,注意當min > max時,應該在res中加入null,程式碼如下:
class Solution { public List<TreeNode> generateTrees(int n) { if (n < 1) return new ArrayList<TreeNode>(); return helper(1,n); } public List<TreeNode> helper(int min, int max) { List<TreeNode> res = new ArrayList<TreeNode>(); if (min > max) { res.add(null); return res; } for (int i = min; i <= max; i++) { List<TreeNode> lres = helper(min,i-1); List<TreeNode> rres = helper(i+1,max); for (TreeNode left : lres) { for (TreeNode right : rres) { TreeNode root = new TreeNode(i); root.left = left; root.right = right; res.add(root); } } } return res; } }