zoukankan      html  css  js  c++  java
  • 95. 不同的二叉搜索树 II

    给定一个整数 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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/unique-binary-search-trees-ii
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    这种方法只能保存树的结构,并不能按照题目要求的顺序输出。比较坑。。。

     1 private TreeNode saveStructure(TreeNode root){
     2         if (root != null) {
     3             TreeNode p = new TreeNode(root.val);
     4             p.left = saveStructure(root.left);
     5             p.right = saveStructure(root.right);
     6             return p;
     7         }
     8         return null;
     9     }
    10     /**
    11      *
    12      * @param n:未添加节点个数
    13      * @param p:父节点
    14      * @param res:结果集
    15      */
    16     private void helper(int n,TreeNode p,TreeNode root, List<TreeNode> res){
    17         if (n == 0) {
    18             // 保存树的结构
    19                 TreeNode copyRoot = saveStructure(root);
    20                 res.add(copyRoot);
    21             return;
    22         }
    23         // 构建右孩子
    24         p.left = null;
    25         TreeNode right = new TreeNode(n);
    26         p.right = right;
    27         helper(n-1, right, root, res);
    28         p.left = p.right = null;
    29 
    30         // 构建左孩子
    31         TreeNode left = new TreeNode(n);
    32         p.left = left;
    33         helper(n-1, left, root, res);
    34         p.left = p.right = null;
    35 
    36         // 构建左右孩子
    37         if (n-2 < 0)
    38             return ;
    39         TreeNode left1 = new TreeNode(n);
    40         TreeNode right2 = new TreeNode(n - 1);
    41         p.left = left1;
    42         p.right = right2;
    43         helper(n-2, left1, root, res);
    44         if (n-2 != 0) // 防止保存两次结果
    45             helper(n-2, right2, root, res);
    46     }
    47 
    48     public List<TreeNode> generateTrees(int n) {
    49         List<TreeNode> res = new ArrayList<>();
    50         TreeNode root = new TreeNode(n);
    51         helper(n-1, root, root, res);
    52         return res;
    53     }
    54 
    55     private static void preOrder(TreeNode p) {
    56         if (p != null) {
    57             System.out.print(p.val+", ");
    58             preOrder(p.left);
    59             preOrder(p.right);
    60         } else {
    61             System.out.print("null, ");
    62         }
    63     }
  • 相关阅读:
    【CodeVS 1028】 花店橱窗布置
    超赞的网络流入门教程
    【BZOJ 1798】[Ahoi2009]Seq 维护序列seq
    【洛谷 1991】 无线通讯网
    【Poj 3469】 Dual Core CPU
    【BZOJ 3504 】[Cqoi2014]危桥
    【Poj 3436】 ACM Computer Factory
    【BZOJ 3990】 [SDOI2015]排序
    【COGS 1873】 [国家集训队2011]happiness(吴确)
    最小割PPt
  • 原文地址:https://www.cnblogs.com/yfs123456/p/11604705.html
Copyright © 2011-2022 走看看