码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode-95-不同的二叉搜索树 II

时间:2020-07-21 13:38:01      阅读:49      评论:0      收藏:0      [点我收藏+]

标签:++   整数   ==   左右   etc   tree   题目   代码   输出   

题目

给定一个整数 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 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ 3 2 1 1 3 2 / / \ 2 1 2 3

 

思路

使用递归方法进行解题,调用 generateTrees(int star,int end) 方法在范围内遍历可作为根节点的数,并将初始范围划分为左右两部分,再继续调用 generateTrees(int star,int end) 方法。

最后将返回的左右子树拼接在根节点上,最终得到所有的二叉搜索树。

代码如下:

 1 public class LeetCode_95 {
 2     
 3      public class TreeNode {
 4           int val;
 5           TreeNode left;
 6           TreeNode right;
 7           TreeNode() {}
 8           TreeNode(int val) { this.val = val; }
 9           TreeNode(int val, TreeNode left, TreeNode right) {
10               this.val = val;
11               this.left = left;
12               this.right = right;
13           }
14       }
15           
16     public List<TreeNode> generateTrees(int n) {
17         
18         List<TreeNode> re = new ArrayList<LeetCode_95.TreeNode>();
19         
20         if(n==0) return re;
21         
22         re = generateTrees(1,n);
23         
24         return re;
25     }
26     
27     
28     public List<TreeNode> generateTrees(int star,int end){
29         
30         List<TreeNode> re = new ArrayList<LeetCode_95.TreeNode>();
31         
32         if(star>end) re.add(null);
33         
34         for(int i=star;i<=end;i++){
35             
36             List<TreeNode> leftTrees = generateTrees(star, i-1); // 获取所有左子树
37             
38             List<TreeNode> rightTrees = generateTrees(i+1, end); // 获取所有右子树
39             
40             for (TreeNode left : leftTrees) {     // 遍历左右子树,将其拼接在跟节点上
41                 for (TreeNode right : rightTrees) {
42                     TreeNode currTree = new TreeNode(i);
43                     currTree.left = left;
44                     currTree.right = right;
45                     re.add(currTree);
46                 }
47             }
48 
49 
50         }
51               
52         return re;
53     }
54     
55 }

 

LeetCode-95-不同的二叉搜索树 II

标签:++   整数   ==   左右   etc   tree   题目   代码   输出   

原文地址:https://www.cnblogs.com/moxie-/p/13353928.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!