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

温州网站建设服务网站设计与实现作业

温州网站建设服务,网站设计与实现作业,做电商要关注哪些网站,新手做网站的注意事项力扣日记#xff1a;【二叉树篇】98. 验证二叉搜索树 日期#xff1a;2023.12.21 参考#xff1a;代码随想录、力扣 98. 验证二叉搜索树 题目描述 难度#xff1a;中等 给你一个二叉树的根节点 root #xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义…力扣日记【二叉树篇】98. 验证二叉搜索树 日期2023.12.21 参考代码随想录、力扣 98. 验证二叉搜索树 题目描述 难度中等 给你一个二叉树的根节点 root 判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1 输入root [2,1,3] 输出true 示例 2 输入root [5,1,4,null,null,3,6] 输出false 解释根节点的值是 5 但是右子节点的值是 4 。 提示 树中节点数目范围在[1, 10^4] 内-2^31 Node.val 2^31 - 1 题解 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/ class Solution { #define SOLUTION 2 public: #if SOLUTION 0// 下面代码有问题搞不定了。。。/*bool isValidBST(TreeNode* root) {if (root nullptr) return false;// 需要先对根节点进行处理if (root-left ! nullptr root-left-val root-val) return false;if (root-right ! nullptr root-right-val root-val) return false;// 根节点暂且满足条件递归判断其子树 return traversal(root-left, root-val, true) traversal(root-right, root-val, false);}// 参数为当前子树的根节点以及该子树的父节点的值以及该子树是左子树还是右子树返回值为该子树是否为二叉搜索树bool traversal(TreeNode* root, int midNodeVal, bool leftTree) {if (root nullptr) return true;// 左为空则左不为false// 左不为空, if (root-left ! nullptr) {// 首先判断左子节点if (root-left-val root-val) return false;if (!leftTree) {// 如果是右子树还要保证其左节点比该子树的父节点大if (root-left-val midNodeVal) return false;}} if (root-right ! nullptr) {// 首先判断右子节点if (root-right-val root-val) return false;if (leftTree) {// 如果是左子树要保证其右节点比该子树的父节点小if (root-right-val midNodeVal) return false;}}// 遍历左右节点bool left traversal(root-left, root-val, true);if (left false) return false;bool right traversal(root-right, root-val, false);return right;}*/ #elif SOLUTION 1// 思路利用二叉搜索树的特性// 二叉搜索树中序遍历是有序的// 方式1先转换为数组再判断数组是否有序bool isValidBST(TreeNode* root) {// 先中序遍历得到数组vectorint result;traversal(root, result);// 对数组进行判断// 如果数组为空或只有1个则为true(空的树也为二叉搜索树)if (result.size() 1) return true;// size 2// 遍历数组for (int i 1; i result.size(); i) {// 如果后面的元素 前面的元素(注意也不能相等)则不是二叉搜索树if (result[i] result[i-1]) return false;}return true;}// 中序遍历左中右void traversal(TreeNode* root, vectorint result) {if (root nullptr) return;// 左traversal(root-left, result);// 中result.push_back(root-val);// 右traversal(root-right, result);} #elif SOLUTION 2// 方式2直接在进行中序遍历的同时判断是否有序TreeNode* pre nullptr; // 保存上一个节点用来比较bool isValidBST(TreeNode* root) {// 空直接返回trueif (root nullptr) return true;// 左bool left isValidBST(root-left);if (left false) return false;// 中// 如果pre不为空当前节点值需要比上一个节点值大if (pre ! nullptr root-val pre-val) return false; // false 则不需要继续迭代了也不需要更新pre了// 如果没有违反更新pre并继续递归pre root;// 右bool right isValidBST(root-right);return right;} #endif };复杂度 时间复杂度 空间复杂度 思路总结 本题就像是脑筋急转弯得从二叉搜索树转到这样一个思路如果一棵树是二叉搜索树其中序遍历一定是有序的从小到大因此本题有两种方式来验证 方式1先用中序遍历左中右得到遍历数组再对数组判断是否有序较简单方式2直接在中序遍历的同时判断是否有序需要在递归中保存上一个值稍复杂
http://www.pierceye.com/news/894882/

相关文章:

  • 网站建设辶金手指排名十三郑州经济技术开发区教师招聘公告
  • 企业网站建设课程体会西安网站制作定制
  • 网站主题服务公司管理软件免费版
  • 网站建设主要职责六安网站建设
  • wordpress电影站主题一般做兼职在哪个网站
  • 可信网站友链怎么做网站建设行业标准
  • 济南营销网站制作公司哪家好口碑好的家装前十强
  • 公司网站开发费账务处理做图表的网站推荐
  • 网站如何做好用户体验wordpress 文章类
  • 做采集网站的方法世界四大广告公司
  • 做断桥铝窗户的网站宿州推广公司
  • 网站优化制作东莞房价一览表
  • 屏显的企业网站应该怎么做沈阳网站推广优化公司哪家好
  • 外包服务有哪些汕头seo网站建设
  • 新公司网站怎么做推广wordpress 中文 seo 插件
  • 网站建设客户分析国家企业信息公示网(广东)
  • php网站开发技术文档天津市装修公司排名榜
  • qq群优惠券里面网站怎么做的长春网站建设找源晟
  • 如何建一个公司的网站百度快速收录入口
  • 网络市场营销湘潭seo优化
  • 网站建设的模块传奇合成版2合1雷霆版手游
  • wordpress快站怎么样js网站开发视频
  • 滕州市 网站建设公司合肥网站建设方案案例
  • 外贸网站推广企业ida设计公司上海
  • 网站怎么做图片转链湄潭建设局官方网站
  • 泰州品牌网站建设二建报名时间2023年报名时间
  • 企业网站优化兴田德润怎么样wordpress标签不输出文章
  • 百度站长平台论坛永嘉网站制作
  • 月嫂公司网站建设构思免费的短视频素材库
  • 2017做哪些网站致富邢台市行政区划图