Leetcode95 不同的二叉搜索树II 精致的分治
定义 G(b,e) 为 b 到 e 之间的元素可以组成的所有二叉搜索树。
在 b ,e 之间选出一个元素作为根节点, 则以该元素为根的所有可能的二叉搜索树为 G(b,i-1) ,G(i+1,e) 的笛卡尔积。
寻找顶层问题本身的递归结构,走的弯路最少。
public final List<TreeNode> generateTrees(int n) { if (n == 0) { return new LinkedList<TreeNode>(); } return generateTrees(1, n); } /** * @Author Niuxy * @Date 2020/7/6 10:48 下午 * @Description 从问题本身找递归结构 * 选取一个根节点分割数组,以该节点为根节点的所有可能的树为 * 同类问题在两边子数组中解的笛卡尔积 */ public final List<TreeNode> generateTrees(int begin, int end) { List<TreeNode> anList = new LinkedList<TreeNode>(); if (begin > end) { anList.add(null); return anList; } if (begin == end) { anList.add(new TreeNode(begin)); return anList; } for (int i = begin; i <= end; i++) { List<TreeNode> left = generateTrees(begin, i - 1); List<TreeNode> right = generateTrees(i + 1, end); for (int j = 0; j < left.size(); j++) { for (int k = 0; k < right.size(); k++) { TreeNode root = new TreeNode(i); root.left = left.get(j); root.right = right.get(k); anList.add(root); } } } return anList; }
当你看清人们的真相,于是你知道了,你可以忍受孤独
分类:
数据结构与算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构