zoukankan      html  css  js  c++  java
  • Unique Binary Search Trees II

    Unique Binary Search Trees II

    问题:

    Given n, generate all structurally unique BST's (binary search trees) that store values 1...n.

    思路:

      dfs或者动态规划

    我的代码:

    public class Solution {
        public List<TreeNode> generateTrees(int n) {
            int[] num = new int[n];
            for(int i = 0; i < n; i++)
            {
                num[i] = i + 1;
            }
            return findNode(num, 0, n);
        }
        public List<TreeNode> findNode(int[] num, int start, int end)
        {
            if(start == end)
            {
                List<TreeNode> list = new ArrayList<TreeNode>();
                list.add(null);
                return list;
            }
            if(start + 1 == end) 
            {
                List<TreeNode> list = new ArrayList<TreeNode>();
                list.add(new TreeNode(num[start]));
                return list;
            }
            List<TreeNode> rst = new ArrayList<TreeNode>();
            for(int i = start; i < end; i++)
            {
               
                List<TreeNode> left = findNode(num, start, i);
                List<TreeNode> right = findNode(num, i + 1, end);
                for(TreeNode l: left)
                {
                    for(TreeNode r: right)
                    {
                        TreeNode root = new TreeNode(num[i]);
                        root.left = l;
                        root.right = r;
                        rst.add(root);
                    }
                }
            }
            return rst;
        }
    }
    View Code

    他人代码:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
    public List<TreeNode> generateTrees(int n) {
        Map<Integer, List<TreeNode>> lists = new HashMap<Integer, List<TreeNode>>();
    
        List<TreeNode> list = new LinkedList<TreeNode>();
        list.add(null);
        if (n==0) return list;
        lists.put(0, list);
    
        list = new LinkedList<TreeNode>();
        TreeNode root = new TreeNode(1);
        list.add(root);
        lists.put(1, list);
    
        for (int i=2; i<=n; i++) {
            list = new LinkedList<TreeNode>();
            for (int j=1; j<=i; j++) {
                for (TreeNode left:lists.get(j-1)) {
                    for (TreeNode right:lists.get(i-j)) {
                        root = new TreeNode(j);
                        root.left = left;
                        root.right = greaterCopy(right, j);
                        list.add(root);
                    }
                }
            }
            lists.put(i, list);
        }
        return list;
    }
    
    private TreeNode greaterCopy(TreeNode node, int add) {
        if (node == null) return null;
        TreeNode copy = new TreeNode(node.val + add);
        copy.left = greaterCopy(node.left, add);
        copy.right = greaterCopy(node.right, add);
        return copy;
    }
    }
    View Code

    学习之处:

    • DFS可以解决的问题往往用动态规划也可以解决,对于考虑Size的动态规划问题,往往是两层循环
    for(int size=1; size<=n; size++)
    {
          for(int j=0; j<=size; j++)
          {
           }   
    }    
    • 需要每一次重新 新建一个TreeNode root = new TreeNode(num[i])因为是地址啊,地址啊!这一点一定要注意。
  • 相关阅读:
    vue中的 computed 和 watch 的区别
    mysql8.0 初始化数据库及表名大小写问题
    sql server alwayson 调整数据文件路径
    zabbix 自定义监控 SQL Server
    mysql 创建用户及授权
    mysql 设置从库只读模式
    mysql8.0 主从复制安装及配置
    centos8.0安装mysql8.0
    centos8替换阿里数据源
    npm publish 报错 【you or one of your dependencies are requesting a package version that is forbidden by your security policy】
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4340239.html
Copyright © 2011-2022 走看看