首页 > 其他分享 >LC 二叉搜索树-汇总

LC 二叉搜索树-汇总

时间:2023-01-05 16:44:15浏览次数:31  
标签:node right TreeNode LC 汇总 二叉 root 节点 left

二叉搜索树


二叉搜索树又称二叉排序树,具有以下性质:

  • 若它的左子树不为空,则子树上所有节点的值都小于根节点的值

  • 若它的右子树不为空,则子树上所有节点的值都大于根节点的值

  • 它的左右子树也分别为二叉搜索树

注意:二叉搜索树中序遍历的结果是有序的。

95. 不同的二叉搜索树 II


给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。

示例 1:

输入:n = 3
输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]

示例 2:

输入:n = 1
输出:[[1]]

回溯

二叉搜索树关键的性质是根节点的值大于左子树所有节点的值,小于右子树所有节点的值,且左子树和右子树也同样为二叉搜索树。因此在生成所有可行的二叉搜索树的时候,假设当前序列长度为 n,如果枚举根节点的值为 i,那么根据二叉搜索树的性质可以知道左子树的节点值的集合为 \([1…i−1]\),右子树的节点值的集合为 \([i+1…n]\)。而左子树和右子树的生成相较于原问题是一个序列长度缩小的子问题,因此可以想到用回溯的方法来解决这道题目。

定义 generateTrees(start, end) 函数表示当前值的集合为 \([start,end]\),返回序列 \([start,end]\) 生成的所有可行的二叉搜索树。按照上文的思路,考虑枚举 \([start,end]\) 中的值 i 为当前二叉搜索树的根,那么序列划分为了 \([start,i−1]\) 和 \([i+1,end]\) 两部分。递归调用这两部分,即 generateTrees(start, i - 1)generateTrees(i + 1, end),获得所有可行的左子树和可行的右子树,那么最后一步只要从可行左子树集合中选一棵,再从可行右子树集合中选一棵拼接到根节点上,并将生成的二叉搜索树放入答案数组即可。

递归的入口即为 generateTrees(1, n),出口为当 \(start>end\) 的时候,当前二叉搜索树为空,返回空节点即可,必须要返回空节点。

Java-代码

标签:node,right,TreeNode,LC,汇总,二叉,root,节点,left
From: https://www.cnblogs.com/guo-nix/p/16778364.html

相关文章

  • 144. 二叉树的前序遍历
    144.二叉树的前序遍历难度简单965收藏分享切换为英文接收动态反馈给你二叉树的根节点root,返回它节点值的前序遍历。示例1:输入:root=[1,null,2,3]输出:[1,2,3]......
  • 145. 二叉树的后序遍历
    145.二叉树的后序遍历难度简单965收藏分享切换为英文接收动态反馈给你一棵二叉树的根节点root,返回其节点值的后序遍历。示例1:输入:root=[1,null,2,3]输出:[3,2......
  • 94. 二叉树的中序遍历
    94.二叉树的中序遍历难度简单1649收藏分享切换为英文接收动态反馈给定一个二叉树的根节点root,返回它的中序遍历。示例1:输入:root=[1,null,2,3]输出:[1,3,2]......
  • 每日算法之二叉树中和为某一值的路径(三)
    JZ84二叉树中和为某一值的路径(三)题目给定一个二叉树root和一个整数值sum,求该树有多少路径的的节点值之和等于sum。1.该题路径定义不需要从根节点开始,也不需要在......
  • jupyter问题汇总
    1.如何查看jupyter当前的路径?importosprint(os.path.abspath('.'))2.假设要安装 numpy 库,则在原来的语句上添加 -i 和镜像地址即可。pipinstall numpy -ihttp......
  • 技术汇总:第十七章:支付宝对接公钥,私钥
    支付宝对接公钥,私钥:https://docs.open.alipay.com/291/106103/截图这里的是公钥。密钥是您自己生成上传的,生成的是应用私钥和应用公钥。应用公钥上传到开放平台截图位置,......
  • 西门子PLC在水处理系统中如何实现手机APP在线监控
    随着时代的发展和科学技术的进步,供水泵站、污水处理厂、城市管道的给排水系统也逐步实现智能化、数字化改造。在实际的应用中,对水处理的工艺要求进一步提高,需要实时对各个站......
  • 技术汇总:第十八章:枚举的简单使用
    结合上一章阅读:https://blog.csdn.net/java_wxid/article/details/99168098枚举代码:packagecom.javaliao.backstage;importlombok.Getter;publicenumMyData{......
  • 【题解】CF1073G Yet Another LCP Problem
    题面很清楚,不概括了。思路后缀树+树剖。套路题。看到lcp考虑转化成后缀树上求lca,这里可以用SAM构造反串的parenttree解撅(f**kuukk)于是问题转化成:每次给......
  • leetcode-653. 两数之和 IV - 输入二叉搜索树
    653.两数之和IV-输入二叉搜索树-力扣(Leetcode)用了迭代进行遍历二叉树,因为二叉搜索树的中序遍历是有序的,所以肯定左边大于右边,然后就可以用一个map来存放之前的数值,......