96. Unique Binary Search Trees1和2

/*这道题的关键是:动态表尽量的选取,知道二叉搜索树中左子树的点都比根节点小,右子树的点都比根节点大所以当i为根节点,左子树有i-1个点,右子树有n-i个点,左右子树就可以开始递归构建,过程和一开始的过程是一样的,而左右子树的特征中可以知道的就是点的个数,所以用点的个数作为动态变量就很好。这样就给我们提供了一个思路:动态规划和树结合的题,由于子问题就是左右树,所以动态变量的选取基本就是考虑题目给出的信息中,可以从根节点得到左右子树的哪些特征,用这个特征作为动态变量。二叉搜索树中,都是左子树的点小于根节点,右子树的点大于根节点,对于所有子树都是这样。用dp[i]表示有i个数的时候能组成多少树dp[i] = dp[0]*dp[i-1]+ ...+ dp[i-1]*dp[0]等号右边分别代表1到i分别是根节点的情况*/int[] dp = new int[n+1];dp[0] = 1;//当没有节点时,就只有一种情况for (int i = 1; i < n+1; i++) {for (int j = 0; j < i; j++) {dp[i] += dp[j] * dp[i-j-1];}}return dp[n];

 

 1  public List<TreeNode> generateTrees(int n) {
 2         /*
 3         从i到n依次选取做为根节点,生成一棵树.根节点为i的这个过程我们叫做function(i),则function(i)中左子树就是从1到i-1的
 4         生成过程,右子树就是从i+1到n的过程,递归function就行,然后对左右子树就行全匹配就行
 5          */
 6         if (n < 1)
 7             return new ArrayList<TreeNode>();
 8         return build(1, n);
 9     }
10 
11     public List<TreeNode> build(int start, int end) {
12         List<TreeNode> res = new ArrayList<>();
13         if (start > end)
14         {
15             res.add(null);
16             return res;
17         }
18         for (int i = start; i <= end; i++) {
19             List<TreeNode> left = build(start, i - 1);
20             List<TreeNode> right = build(i + 1, end);
21 
22             for (TreeNode lt :
23                     left) {
24                 for (TreeNode rt :
25                         right) {
26                     //由于每次组合都形成一个新的树,所以新建树应该是在这里
27                     TreeNode root = new TreeNode(i);
28                     root.left = lt;
29                     root.right = rt;
30                     //注意添加的位置,每组合一个左右子树就会形成一种情况
31                     res.add(root);
32                 }
33             }
34 
35         }
36         return res;
37     }

 

转载于:https://www.cnblogs.com/stAr-1/p/7922877.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python调用c++的库传递二级指针

遇见的问题&#xff1a;需要从python向c函数中传入二级指针的参数 char**P的问题&#xff1a; c_char_datas (ctypes.c_char_p * file_num)() for j in range(file_num):c_char (ctypes.c_char*6)()c_char.value file_list[j].name.encode(utf-8)c_char_datas[j] ctypes.…

编译tensorflow的小小记录

编译tensorflow有专门的编译工具bazel&#xff0c;所以需要先安装bazel。我使用的是源码编译bazel&#xff08;https://github.com/bazelbuild/bazel/releases&#xff09;。 第一个坑&#xff1a;git clone bazel源码或者使用下载的bazel-0.21.0.tar.gz&#xff0c;这种源码里…

layui富文本编译器添加图片

1、创建富文本编辑器 <form class"layui-form" method"post" id"myForm" enctype"multipart/form-data"><div class"layui-form-item layui-form-text"><label class"layui-form-label">内容&…

为什么数学是理解世界的最佳方式

来源&#xff1a;遇见数学在对着乔治梅森大学最近的一届新生致辞时&#xff0c;丽贝卡戈尔丁&#xff08;Rebecca Goldin&#xff09;传递了一个令人沮丧的数据&#xff1a;最近的一项研究显示&#xff0c;36%的大学生在大学四年时间里批判性思维并未显著提高。戈尔丁解释说&am…

windows查看dll库接口函数

一种是使用工具depends&#xff0c;另一种是使用vs的cmd命令窗口&#xff0c;dumpbin /EXPORTS xxx.dll就可以查看xxx.dll的函数接口了

bootstrap-table 行合并和列合并,以及固定列宽度等问题

列合并和列宽度固定&#xff1a; 1 .setWidth {2 table-layout: fixed;3 }4 5 .setWidth > thead > tr > th {6 width: 80px;7 }8 <table class"setWidth" id"EstateTable" data-mobile-responsive&…

c++错误functional:1526:9: error: no type named ‘type’ in ‘class std::result_of

关于这个错误&#xff0c;我自己的情况是thread函数形参有&引用传值&#xff0c;例如: void thread_test(vector<int> &test_vec)&#xff0c;编译就会报错&#xff0c;去掉&就可以了&#xff0c;查到的其他方式并没有能解决这个问题&#xff0c;不知道是因…

5G 标准的走向,为何越来越不同寻常?

作者 | Michael Koziol译者 | 弯月&#xff0c;责编 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;以下为译文&#xff1a;如果没有互联网工程任务组&#xff08;Internet Engineering Task Force&#xff09;制定种种互联网标准&#xff0c;那么此时此刻你…

WebSocket教程(一)

一、websocket与http WebSocket是HTML5出的东西&#xff08;协议&#xff09;&#xff0c;也就是说HTTP协议没有变化&#xff0c;或者说没关系&#xff0c;但HTTP是不支持持久连接的&#xff08;长连接&#xff0c;循环连接的不算&#xff09; 首先HTTP有 1.1 和 1.0 之说&…

iis设置导致python调用urllib.request.urlopen出错问题

iis确实用的很少&#xff0c;从来没有注意过&#xff0c;今天就遇见了问题。 python中使用urllib.request.urlopen调用测试服务器接口&#xff0c;之前从没有出现问题&#xff0c;今天用了一条70M的数据进行测试&#xff0c;突然报错404&#xff0c;这是什么鬼&#xff0c;各种…

人类智慧的本质是什么?【知社视频】第118期

来源&#xff1a;知社学术圈自古希腊开始&#xff0c;人们就认为智慧是人的根本属性&#xff0c;哲学家普罗泰戈拉有句名言&#xff0c;“人是万物的尺度&#xff0c;是存在的事物存在的尺度&#xff0c;也是不存在的事物不存在的尺度”。马克思主义也认为&#xff0c;认识世界…

scrapy的安装

1. 先安装python3 2. 设置python3的环境变量&#xff0c;script的环境变量 3. pip3 install scrapy 4. 安装错误提示去ms官网下载vc2015 5. 安装pywin32 pywin32-221.win-amd64-py3.6 安装完成&#xff01;&#xff01; 转载于:https://www.cnblogs.com/liyugeng/p/7941102.ht…

nginx小记

这只是个小记&#xff0c;不是很懂&#xff0c;随手记录已知的知识。 1.nginx是为了让外部网络可以访问内部系统&#xff0c;做了ip和端口的映射&#xff0c;所以如果是内部使用&#xff0c;可以直接连接内部ip和端口&#xff0c;而不用非要使用nginx映射的。 &#xff08;有新…

20个!中国科协发布2020年重大科学问题和工程技术难题

来源&#xff1a; 中国科学报作者 | 高雅丽8月15日&#xff0c;中国科协在第二十二届中国科协年会闭幕式上发布了 10个对科学发展具有导向作用的科学问题和10个对技术和产业具有关键作用的工程难题。10个前沿科学问题为&#xff1a;冠状病毒跨种传播的生态学机制是什么&#xf…

openvino安装小记

使用的是Linux版本安装完整包l_openvino_toolkit_p_2019.2.242.tgz&#xff0c;这个是官方安装说明&#xff1a;https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_linux.html。 简单记录一下问题&#xff1a; 1.使用xmanager想要用GUI脚本…

Java 8特性

1. Java8的新特性 1.1. Lambda表达式和函数式接口 最简单的Lambda表达式可以用逗号分隔的参数列表、->符号和功能语句块来表示。示例如下&#xff1a; Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) ); 请注意到…

图神经网络的表达能力,究竟有多强大?

来源&#xff1a;AI科技评论作者 | Mr Bear编辑 | 丛 末近年来&#xff0c;随着图神经网络在各个领域的火热应用&#xff0c;越来越多的学者试图从图论的角度对图神经网络的表达能力进行理论分析&#xff0c;并基于这些理论分析开发出了性能强大的模型。然而&#xff0c;在实际…

android studio 调试c/c++代码小记

使用的android studio3.0.1版本&#xff0c;sdk 27. 新建的测试程序&#xff0c;勾选了c支持&#xff0c;默认有native_lib.cpp。 1.在cpp中添加了测试的native代码&#xff0c;提示No implementation found for错误&#xff0c;怎么看都跟之前的默认函数没啥区别啊&#xff…

在Mac(OS X)中使用GitHub的超详细攻略(20170706)

转自&#xff1a;http://blog.csdn.net/baimafujinji/article/details/74533992 GitHub是一个面向开源及私有软件项目的托管平台、开源代码库以及版本控制系统&#xff0c;因为只支持 Git 作为唯一的版本库格式进行托管&#xff0c;故名 GitHub。通常在Windows下使用GitHub的教…

低时延AI完美适配工业场景,边缘智能如何构建数字工业新生态?

物联网智库 原创二次转载请联系原作者今年年初爆发的新冠疫情迫使居民的生活、学习、工作由线下向线上大规模迁移&#xff0c;令各行各业意识到了数字化升级的重要性&#xff0c;纷纷踏上转型之路。联网设备数量也随着物联网技术的快速发展而不断飙升&#xff0c;越来越多的应用…