不同的二叉查詢樹 II
阿新 • • 發佈:2019-01-31
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @paramn n: An integer * @return: A list of root */ public List<TreeNode> generateTrees(int n) { // write your code here if(n==0){ List<TreeNode> R = new LinkedList<TreeNode>(); R.add(null); return R; } return generateTrees(1,n); } private TreeNode copy(TreeNode Old){ if(Old==null) return null; TreeNode T = new TreeNode(Old.val); T.right = copy(Old.right); T.left = copy(Old.left); return T; } List<TreeNode> generateTrees(int start, int last){ if(start>last) return null; List<TreeNode> result = new LinkedList<TreeNode>(); for(int i=start;i<=last;++i){ TreeNode root = new TreeNode(i); List<TreeNode> left = generateTrees(start,i-1); List<TreeNode> right = generateTrees(i+1,last); if(left==null&&right==null) result.add(root); else if(left==null){ for(TreeNode R:right){ root.right = R; result.add(copy(root)); } } else if(right==null){ for(TreeNode L:left){ root.left = L; result.add(copy(root)); } } else{ for(TreeNode L:left) for(TreeNode R:right){ root.left = L; root.right = R; result.add(copy(root)); } } } return result; } }