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

易优cms仿站教程做百度推广网站被攻击

易优cms仿站教程,做百度推广网站被攻击,做电商要关注哪些网站,王也为什么这么受欢迎1 中序遍历和搜索树原理 二叉搜索树按照中序遍历正好是一个递增序列。其比较规范的定义是: 若它的左子树不为空,则左子树上所有节点的值均小于它的根节点的值;若它的右子树不为空,则右子树所有节点的值均大于它的根节点的值&…

1 中序遍历和搜索树原理

二叉搜索树按照中序遍历正好是一个递增序列。其比较规范的定义是:

  • 若它的左子树不为空,则左子树上所有节点的值均小于它的根节点的值;
  • 若它的右子树不为空,则右子树所有节点的值均大于它的根节点的值;
  • 它的左、右子树也分别为二叉搜索树,比如下面的例子:

在这里插入图片描述

这两棵树的中序遍历分别是[1, 2, 3, 4, 5, 6, 7, 8, 9][6, 7, 8, 9],都是二叉搜索树。

2 二叉搜索树中搜索特定值

力扣700题,给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。

比如target为3,给定二叉搜索树:

			5/  \3    4/ \1   2

应该返回如下子树:

		  3  / \1   2

2.1 递归实现

使用递归来实现,先来分析一下有哪些情况:

  • 如果根节点root === null或者root.val === target就直接返回根节点;
  • 如果target < root.val,说明比右子树的值小,去根节点的左子树进行查找searchBST(root.left, target);
  • 如果target > root.val,说明比左子树的值大,去根节点的右子树进行查找searchBST(root.right, target)

递归完整代码如下:

// 递归法
function searchBST(root, target) {// 如果根节点为空或者root.val === target,直接返回rootif (root === null || root.val === target) {return root;}// 如果target < root.val,进入根节点的左子树查找// 如果target > root.val,进入根节点的右子树查找return target < root.val ? searchBST(root.left, target) : searchBST(root.right, target);
}

2.2 迭代实现

迭代逻辑:

  • 如果根节点root === null或者root.val !== target,进入下面的判断
    • 如果target < root.val,说明比右子树的值小,去根节点的左子树进行查找,root = root.left;
    • 如果target > root.val,说明比左子树的值大,去根节点的右子树进行查找,root = root.right

迭代完整代码如下:

// 迭代法
function searchBST(root, target) {// 如果根节点为空或者target !== root.valwhile (root !==null && target !== root.val) {// 如果target < root.val,进入根节点的左子树查找,root = root.left// 如果target > root.val,进入根节点的右子树查找,root = root.rightroot = (target < root.val ? root.left : root.right);}return root;
}

3 验证二叉搜索树

力扣98题,给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效二叉树定义如下:

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

分析:根据题目以及中序遍历的特性,可以知道二叉搜索树中序遍历得到的序列是一个升序序列,要判断是否是一个有效二叉树,只需要在中序遍历的时候一边遍历一边检查当前节点的值是否大于前一个遍历到的节点值即可。

3.1 递归实现

递归实现,代码如下:

function isValidBST(root) {let pre = Number.MIN_SAFE_INTEGER;return validBST(root);function validBST(node) {if (node === null) {return true;}// 如果左子树某个元素不满足要求就退出if (!validBST(node.left)) {return false;}// 如果当前节点值≤中序遍历前一个节点的值,不能满足二叉搜索树条件if (node.val <= pre) {return false;}pre = node.val;return validBST(node.right);}
}

3.2 迭代实现

测试用例的最小节点有可能是javascript中的最小值,因此初始化preVal = -Infinity

function isValidBST(root) {const nodeStack= [];let preVal = -Infinity;while (nodeStack.length !== 0 || root !== null) {while (root !== null) {nodeStack.push(root);// 先遍历左子树root = root.left;}// 比较左子树中间根节点与前一个节点的值,如果小与前一个节点值,说明不是二叉搜索树root = nodeStack.pop();if (root.val <= preVal) {return false;}preVal = root.val;// 再遍历右子树root = root.right;}return true;
}
http://www.yayakq.cn/news/717789/

相关文章:

  • 烟台网站建设seo网站建设 重庆
  • 企业网站后台管理系统观澜做网站
  • 心雨在线高端网站建设专业沛县网站建设
  • 贵州省建设厅网站文件网站开发与网站设计区别
  • 织梦欧美网站模板百度网站优化工具
  • 开发公司属于什么行业搜索引擎关键词快速优化
  • 网站后台怎么打开自动推广工具
  • 国内做网站上市公司seo网站关键词快速排名
  • 国外网站搭建平台asp.net mvc 5网站开发之美
  • 系部网站建设中期检查总结WordPress4.5取消了
  • 机械网站建设中心上海专业网站建设平台
  • 青岛建网站人织梦做的网站怎么加弹窗
  • 遵义哪里有做网站的网站开发推荐书籍
  • 青岛网站建设找正信郑州聚商网络科技有限公司
  • 制做网站首先应该怎么做网址导航网址大全
  • 深圳网站 制作信科便宜服务器试用
  • 娄底建设网站的公司陌陌引流推广软件
  • 商城网站开发与设计网站注册
  • cms 网站后台内容管理系统模板科技有限公司简介
  • 淘宝网站官网靖江做网站单位
  • 网站建设的案例泰州建站价格
  • 佛山高端网站默认网站停止
  • 柳州网站建设价格河北网站备案注销
  • 房产经纪人如何做网站吸客查企业哪个app最好
  • 网上商店网站设计临沂品牌网站推广
  • 如何用vs的c 做网站安阳网站建设商祺
  • 房地产行业网站开发搜索引擎网站盈利模式
  • 南京建站服务福建注册公司网上申请入口
  • 网站建设英文术语做wps的网站赚钱
  • 淡水网站建设公司温州网站关键词