当前位置: 首页 > news >正文

php开发网站的优势wordpress 截取字符串

php开发网站的优势,wordpress 截取字符串,上海cms网站建设,微商城分销平台上线想要精通算法和SQL的成长之路 - 验证二叉搜索树和不同的二叉搜索树 前言一. 验证二叉搜索树二. 不同的二叉搜索树三. 不同的二叉搜索树II 前言 想要精通算法和SQL的成长之路 - 系列导航 二叉搜索树的定义: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包…

想要精通算法和SQL的成长之路 - 验证二叉搜索树和不同的二叉搜索树

  • 前言
  • 一. 验证二叉搜索树
  • 二. 不同的二叉搜索树
  • 三. 不同的二叉搜索树II

前言

想要精通算法和SQL的成长之路 - 系列导航

二叉搜索树的定义:

  • 节点的左子树只包含 小于 当前节点的数。
  • 节点的右子树只包含 大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

一. 验证二叉搜索树

原题链接
在这里插入图片描述
思路:

  1. 树的中序遍历:左节点 --> 父节点 --> 右节点。
  2. 我们按照中序遍历二叉树,比较节点的大小即可。可以用一个全局的临时变量来存储上一个节点的值。

代码如下:

long preVal = Long.MIN_VALUE;public boolean isValidBST(TreeNode root) {if (root == null) {return true;}// 判断左节点if (!isValidBST(root.left)) {return false;}// 当前节点肯定是要大于上一个节点的值的,这样才满足二叉搜索树的性质if (root.val <= preVal) {return false;}// 更新pre值preVal = root.val;// 判断右节点return isValidBST(root.right);
}

二. 不同的二叉搜索树

原题链接
在这里插入图片描述
思路如下:

  1. 我们假设dp[i] 是以 i 个数字组合而成的不同二叉搜索树的个数。
  2. f(i) :代表以数字 i 为根节点的二叉搜索树个数。
  3. 那么此时,左节点的节点数量为: i - 1,右节点的节点数量为: n - i 。那么左侧节点可组成的不同二叉树个数为:dp[i-1],右侧为:dp[n-i]
  4. f(i) = dp[i-1] * dp[n-i]
  5. dp[n] = f(1) + f(2) + ... + f(n) = dp[0] * dp[n-1] + dp[1] * dp[n-2] + ... + dp[n-1] + dp[0]。即得一个动态规划的递推公式。

最终代码如下:

public int numTrees(int n) {int[] dp = new int[n + 1];// 初始化dp[0] = 1;dp[1] = 1;for (int i = 2; i < n + 1; i++) {for (int j = 1; j < i + 1; j++) {dp[i] += dp[j - 1] * dp[i - j];}}return dp[n];
}

三. 不同的二叉搜索树II

原题链接
在这里插入图片描述

我们可以用自底向上的一种思路去考虑,当以数字 i 作为根节点,构建二叉搜索树的时候,数量有多少?

  1. 我们假设一个函数:buildTree(int left , int right) 是用来统计区间[left,right]范围内,不同的二叉搜索树集合。
  • 那么当以数字 i 作为根节点的时候,左侧区间可拿到的集合为:buildTree(left, i -1 ),右侧为:buildTree(i+1,right)
  • 拿到这两个左右集合之后,我们遍历他们,两两结合,以数字 i 作为根节点,构建二叉搜索树。

不难得出代码:

public List<TreeNode> buildTree(int left, int right) {ArrayList<TreeNode> res = new ArrayList<>();// 边界判断if (left > right) {res.add(null);return res;}if (left == right) {res.add(new TreeNode(left));return res;}// 统计区间[left,right]内的二叉搜索树个数for (int i = left; i <= right; i++) {// 如果以 i 作为二叉搜索树的根节点,那么,左侧区间可构建的二叉搜索树的数量为List<TreeNode> leftBSTNum = buildTree(left, i - 1);List<TreeNode> rightBSTNum = buildTree(i + 1, right);// 左右两个子二叉搜索树两两结合for (TreeNode leftTree : leftBSTNum) {for (TreeNode rightTree : rightBSTNum) {TreeNode root = new TreeNode(i);root.left = leftTree;root.right = rightTree;res.add(root);}}}return res;
}

那么最终代码如下:

public List<TreeNode> generateTrees(int n) {ArrayList<TreeNode> res = new ArrayList<>();// 特殊值判断if (n == 0) {return res;}return buildTree(1, n);
}public List<TreeNode> buildTree(int left, int right) {ArrayList<TreeNode> res = new ArrayList<>();// 边界判断if (left > right) {res.add(null);return res;}if (left == right) {res.add(new TreeNode(left));return res;}// 统计区间[left,right]内的二叉搜索树个数for (int i = left; i <= right; i++) {// 如果以 i 作为二叉搜索树的根节点,那么,左侧区间可构建的二叉搜索树的数量为List<TreeNode> leftBSTNum = buildTree(left, i - 1);List<TreeNode> rightBSTNum = buildTree(i + 1, right);// 左右两个子二叉搜索树两两结合for (TreeNode leftTree : leftBSTNum) {for (TreeNode rightTree : rightBSTNum) {TreeNode root = new TreeNode(i);root.left = leftTree;root.right = rightTree;res.add(root);}}}return res;
}
http://www.yayakq.cn/news/825024/

相关文章:

  • 百度不收录网站网站的流程
  • 商城网站 报价 方案怎样说服企业做网站建设推广
  • 如何建设社区网站域名备案网站建设书模板
  • 陕西锦宇建设有限公司网站网站建设开拓该行业的难点疑
  • 珠海住房和建设局网站黑龙江建设网查询平台
  • 网站建设公司选哪个好两学一做是什么网站
  • 怎样在百度搜到自己的网站包年seo和整站优化
  • 徐州做网站建设公司百度怎么把自己网站展现在百度
  • 徐州本地网站编程入门先学什么软件
  • 公司网站开发费用计入什么类型的网站容易做
  • 我想在阿里巴巴网站开店 怎么做九江集团网站建设公司
  • 淘宝店铺网站建立长春网站设计制作培训
  • 手机网站域做什么广告wordpress页面文章列表
  • 怎样做企业网站备案深圳网站定制 开发
  • 如何建设一个静态网站泰安二手房最新发布出售房源
  • 网站建设调查回访表国外做评论的网站
  • 怎么建设58同城网站网站专业建设
  • 做民宿要给网站多少钱深圳网站建设那家好
  • 织梦后台怎么做网站地图.net 微信网站开发
  • 重庆建设工程安全管理协会网站推广链接跳转
  • 无锡高端网站建设开发怎么做动态的实时更新的网站
  • 那网站做问答wordpress登陆网址
  • 徐州在线制作网站ps在线图片编辑
  • 上海做家教网站有哪些wordpress 淘客主题
  • 郑州粒米seo外包seo优化查询
  • 怎么下载网站的模板受雇去建设网站类网站
  • 网站设计的软件广西建设厅网官网
  • 做网站的岗位好吗天元建设集团有限公司 李增启
  • 网站开发费用预算网络整合营销理论概念
  • 公司简历模板电子版seo推广关键词公司