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

网站建设做的好的公司seo网站关键词优化方法

网站建设做的好的公司,seo网站关键词优化方法,做电影网站需要注意什么软件,网站建设与维护案列原题链接🔗:验证二叉搜索树 难度:中等⭐️⭐️ 题目 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于…

原题链接🔗:验证二叉搜索树
难度:中等⭐️⭐️

题目

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

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

示例 1
在这里插入图片描述

输入:root = [2,1,3] 输出:true

示例 2
在这里插入图片描述

输入:root = [5,1,4,null,null,3,6] 输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

提示

  • 树中节点数目范围在[1, 104] 内
  • -231 <= Node.val <= 231 - 1

题解

  1. 解题思路:

验证一棵二叉树是否为二叉搜索树(BST)是算法面试中常见的问题。二叉搜索树具有以下性质:

  1. 若任意节点的左子树不为空,则左子树上所有节点的值均小于它的节点值。
  2. 若任意节点的右子树不为空,则右子树上所有节点的值均大于它的节点值。
  3. 任意节点的左、右子树也可能有空二叉树,并且都同时为空。
  4. 左子树和右子树也分别为二叉搜索树。

以下是验证二叉搜索树的几种解题思路:

  1. 中序遍历
    二叉搜索树的中序遍历结果应该是一个递增的序列。因此,可以通过中序遍历来验证二叉树是否为BST。

    • 对二叉树进行中序遍历,将遍历结果存储在一个数组中。
    • 检查数组中的元素是否是递增的。

这种方法的时间复杂度是O(n),空间复杂度也是O(n),因为需要存储所有的节点值。

  1. 递归检查
    使用递归函数,同时检查当前节点的值是否在允许的范围内。

    • 定义一个变量lowerupper来存储当前节点允许的最小值和最大值,初始时可以是负无穷和正无穷。
    • 在递归函数中,首先检查当前节点的值是否在lowerupper之间。
    • 然后递归地对左子树和右子树调用函数,同时更新lowerupper的值。

这种方法的时间复杂度是O(n),因为它只需要遍历一次所有节点,空间复杂度是O(h),其中h是树的高度,因为递归栈的深度。

  1. 迭代法
    使用迭代法代替递归,可以避免递归带来的栈溢出问题,特别是对于非常深的树。

    • 使用一个栈来存储节点,从根节点开始,按照二叉树的遍历顺序(例如先序、中序或后序)将节点压入栈中。
    • 同时维护一个变量来记录前一个节点的值。
    • 当迭代到下一个节点时,检查它是否符合BST的顺序性。

这种方法的时间复杂度同样是O(n),空间复杂度也是O(n),因为最坏情况下,栈可能需要存储所有的节点。

  1. Morris遍历
    Morris遍历是一种不需要额外空间的遍历方法,可以用于验证BST。

    • 使用Morris遍历遍历二叉树,同时检查节点的值是否递增。
    • Morris遍历通过在树中添加临时指针来实现,不需要使用栈或数组。

这种方法的时间复杂度是O(n),空间复杂度是O(1),因为它不需要额外的存储空间。

每种方法都有其优缺点,你可以根据具体情况选择最合适的方法。例如,如果树非常深,递归可能会导致栈溢出,此时可以使用迭代法或Morris遍历。如果需要额外的空间不是问题,中序遍历是一个简单直观的方法

递归法

  1. 复杂度:时间复杂度是O(n),因为它只需要遍历一次所有节点,空间复杂度是O(h),其中h是树的高度,因为递归栈的深度。
  2. c++ demo
#include <iostream>
#include <limits>struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};class Solution {
public:bool isValidBST(TreeNode* root) {return validate(root, std::numeric_limits<long>::min(), std::numeric_limits<long>::max());}private:bool validate(TreeNode* node, long min, long max) {if (!node) return true; // 空节点是有效的// 检查当前节点的值是否在合适的范围内if (node->val <= min || node->val >= max) return false;// 递归地验证左子树和右子树// 左子树的所有值必须小于当前节点的值// 右子树的所有值必须大于当前节点的值return validate(node->left, min, node->val) &&validate(node->right, node->val, max);}
};int main() {Solution solution;// 构建一个示例二叉搜索树TreeNode* root = new TreeNode(2);root->left = new TreeNode(1);root->right = new TreeNode(3);// 验证二叉搜索树bool result = solution.isValidBST(root);std::cout << (result ? "Valid BST" : "Invalid BST") << std::endl;// 清理分配的内存(注意:在实际应用中,应该使用智能指针来自动管理内存)delete root->left;delete root->right;delete root;return 0;
}
  • 输出结果:

Valid BST

  1. 代码仓库地址:isValidBST
http://www.shuangfujiaoyu.com/news/53215.html

相关文章:

  • 杭州python做网站金戈西地那非片
  • ddns怎么做网站站长工具seo优化
  • 伍佰亿网站怎么做网站建设关键词排名
  • 用yershop做网站网络营销的发展概述
  • 深圳网站 商城制作市场调研报告3000字范文
  • 免费网站建设企业阿里指数怎么没有了
  • 网投网站建设网站域名备案查询
  • 深圳网站定制开发免费的seo
  • 党风廉政建设网评网站每天4元代发广告
  • 政府网站网站安全建设目标深圳英文网站推广
  • 免费体验服务器seo sem
  • 赣州一店面爆炸4死镇江关键字优化品牌
  • 网络平台的推广营销方案某一网站seo策划方案
  • dedecms网站湖南专业关键词优化
  • 丰台成都网站建设抄一则新闻四年级
  • 推广比较好的网站有哪些网络营销服务公司
  • 河北住房和城乡建设厅网站百度官网首页官网
  • 网站admin密码忘记了怎么办专业的seo排名优化
  • 成人用品网站优化方法百度新闻官网
  • 网站建设谁家好网页制作免费模板
  • 青岛搜客网站建设公司班级优化大师的功能
  • 个人网站建设模板南安seo
  • 俄文视频网站开发网站搭建公司
  • 企业营销推广型网站建设市场营销产品推广策划方案
  • 安徽茶叶学会 网站建设seo排名优化培训价格
  • 个人可以建网站卖东西吗seo收费还是免费
  • 深圳网站优化网站企业网站建设规划
  • 动漫网站首页设计广州短视频代运营
  • 属于网站开发工具的是竞价代运营
  • 鲲鹏建设集团有限公司网站seo建站工具