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

企业建设官方网站作用及意义公司内部网络怎么建立

企业建设官方网站作用及意义,公司内部网络怎么建立,南昌网站建设电话,专业网站建设公司兴田德润放心题目: 给定二叉树的根节点root,判断是否是一个有效二叉搜索树 有效二叉搜索树: 1.节点的左子树只包含小于当前节点的树 2.节点的右子树只包含大于当前节点的树 3.所有左子树和右子树自身必须也是二叉搜索树 方法一:递归 如果该二叉树的…

题目:

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

有效二叉搜索树:

1.节点的左子树只包含小于当前节点的树

2.节点的右子树只包含大于当前节点的树

3.所有左子树和右子树自身必须也是二叉搜索树

方法一:递归

如果该二叉树的左子树不为空,则左子树上所有节点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左右子树也为二叉搜索树。

设计一个递归函数 helper(root, lower, upper) 来递归判断,函数表示考虑以 root 为根的子树,判断子树中所有节点的值是否都在 (l,r) 的范围内(注意是开区间)。如果 root 节点的值 val 不在 (l,r) 的范围内说明不满足条件直接返回,否则我们要继续递归调用检查它的左右子树是否满足,如果都满足才说明这是一棵二叉搜索树。

根据二叉搜索树的性质,在递归调用左子树时,我们需要把上界 upper 改为 root.val,即调用 helper(root.left, lower, root.val),因为左子树里所有节点的值均小于它的根节点的值。同理递归调用右子树时,我们需要把下界 lower 改为 root.val,即调用 helper(root.right, root.val, upper)。

函数递归调用的入口为 helper(root, -inf, +inf), inf 表示一个无穷大的值。

class TreeNode(object):def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution(object):def isValidBST(self, root):def helper(node, lower=float('-inf'), upper=float('inf')):# 如果节点为空,说明已经遍历到叶子节点或空树,返回 Trueif not node:return Trueval = node.val# 当前节点的值必须大于 lower 且小于 upperif val <= lower or val >= upper:return False# 递归检查右子树,将当前节点的值作为新的 lowerif not helper(node.right, val, upper):return False# 递归检查左子树,将当前节点的值作为新的 upperif not helper(node.left, lower, val):return Falsereturn Truereturn helper(root)

时间复杂度:O(n)其中 n 为二叉树的节点个数。在递归调用的时候二叉树的每个节点最多被访问一次

空间复杂度:O(n)


方法二:中序遍历

二叉搜索树「中序遍历」得到的值构成的序列一定是升序的,这启示我们在中序遍历的时候实时检查当前节点的值是否大于前一个中序遍历到的节点的值即可。如果均大于说明这个序列是升序的,整棵树是二叉搜索树,否则不是

中序遍历是二叉树的一种遍历方式,它先遍历左子树,再遍历根节点,最后遍历右子树。而我们二叉搜索树保证了左子树的节点的值均小于根节点的值,根节点的值均小于右子树的值,因此中序遍历以后得到的序列一定是升序序列

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def isValidBST(self, root):""":type root: Optional[TreeNode]:rtype: bool"""stack=[]  #用于模拟递归的栈,用来存储待处理的节点inorder=float('-inf') #用于记录前一个访问的节点值。初始值为负无穷while stack or root: #栈不为空或者当前节点不为空while root:  #当前节点和所有左子树节点压入栈stack.append(root)root=root.leftroot=stack.pop()  #从栈中弹出一个节点
#之前压入的是当前节点和所有左子树节点,所以栈顶的节点是当前树的最左节点if root.val<=inorder:return Falseinorder=root.val #更新 inorder 为当前节点的值root=root.right #将当前节点的右子树作为下一个要处理的节点return True

时间复杂度:O(n)其中 n 为二叉树的节点个数。在递归调用的时候二叉树的每个节点最多被访问一次

空间复杂度:O(n)

源自扣官方题解
 


文章转载自:

http://MJs7wUPW.rjhts.cn
http://ZrVyikVs.rjhts.cn
http://oG0SMaZs.rjhts.cn
http://VY85AdCl.rjhts.cn
http://rkgXmGN8.rjhts.cn
http://ddvTASLL.rjhts.cn
http://gbRKJWTO.rjhts.cn
http://BIFaXUOY.rjhts.cn
http://zj1dFyZG.rjhts.cn
http://iDKjvXKL.rjhts.cn
http://tOhxxNVN.rjhts.cn
http://g6yi0qoc.rjhts.cn
http://58QaQBkV.rjhts.cn
http://ILRGHDTD.rjhts.cn
http://5A5N8USe.rjhts.cn
http://qSD0U7I1.rjhts.cn
http://xt1GZwAy.rjhts.cn
http://uVbnGTw7.rjhts.cn
http://ETFF9Oo3.rjhts.cn
http://9HbRBvbe.rjhts.cn
http://51j2VItf.rjhts.cn
http://XVvWqj2S.rjhts.cn
http://3LmV4y10.rjhts.cn
http://Jz81d8FV.rjhts.cn
http://0R8JmYei.rjhts.cn
http://cZ5LTzk5.rjhts.cn
http://aNmKk8Fu.rjhts.cn
http://apSksTDB.rjhts.cn
http://ENUuwrte.rjhts.cn
http://3wMJyPCH.rjhts.cn
http://www.dtcms.com/wzjs/624158.html

相关文章:

  • 郑州专业网站制作费用报价建设公司网站要注意什么
  • 深圳市网站建设公苏州网络推广推广
  • 中国建设银行龙卡信用卡网站推广普通话的重要意义
  • 网站建设有哪些费用丰城市建设局网站
  • 临沂免费做网站哪个网站开发小程序
  • 石家庄行业网站装修网站建设价格
  • 深圳网站优化多少钱wordpress 修改版本号
  • 怎么做自己的设计网站前端面试题
  • 网站商城建设多少钱移动商城积分怎么用
  • 保定网站制作费用网站开发用什么架构
  • 临沂做网站价格怎么搭建Wordpress博客
  • 锦州企业网站建设湛江招聘网最新招聘
  • 手机电脑网站排名佛山个人制作网站公司
  • 为何网站不被百度收录网站建设的制度建设
  • 网站用户界面设计工作室是个体户还是公司
  • 公司做网站应记入哪个会计科目做自己的网站如何赚钱的
  • 建网站新科网站建设有域名和空间怎么做网站
  • 漳州企业网站建设制作分类信息网站 建议 建设
  • 帮人负责做网站叫什么工作网页开发者工具怎么用
  • 怎样做视频网站做影片的网站描述
  • 网站建设合同属于什么类别wordpress无法打开网页
  • 网站备案本人承诺完全开源的一个商城系统
  • 九江集团网站建设公司软文推广策划方案
  • 佛山市网站建设分站哪家好网站聚合页面
  • 网站建设 碧辉腾乐一级a做爰片就在线看网站
  • 微信手机网站设计苏州高新区网页设计
  • 好网站建设公司报价企业手机网站源码下载
  • 免费建网站软件哪个好wordpress komiles
  • 网站建设 首选百川互动自己开个什么小公司好
  • 网站建设个人wordpress禁止自适应