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

校园网站建设依据注册公司成本多少钱

校园网站建设依据,注册公司成本多少钱,怎样做搜索引擎推广,wordpress修改密码后还是登陆不了题目描述 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#x…

题目描述

给你一个二叉树的根节点 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

思路

递归法

可以使用递归法中序遍历将二叉搜索树转变成一个数组,然后只要比较一下,这个数组是否是有序,就能判断是否为搜索二叉树,注意二叉搜索树中不能有重复元素

更好思路是一边遍历一边判断值是不是递增的,此时需要记录前一个节点的值。

递归三部曲:

  1. 确定递归函数的参数和返回值。要定义一个longlong的全局变量,用来比较遍历的节点是否有序,因为后台测试数据中有int最小值,所以定义为longlong的类型,初始化为longlong最小值。
  2. 确定终止条件。遇到空节点就可以终止,空节点也是搜索二叉树。
  3. 确定单层递归的逻辑。中序遍历,一直更新maxVal(相当于前一个节点的值),一旦发现maxVal >= root->val,就返回false,注意元素相同时候也要返回false。

迭代法

可以用迭代法模拟二叉树的中序遍历。

代码

C++版:

递归法

/*** 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 {
public:// 递归法,中序遍历long long maxVal = LONG_MIN; // f防止测试数据中有int最小值TreeNode* pre = NULL; // 用来记录前一个节点,这样可以不用初始化最小值bool isValidBST(TreeNode* root) {// 终止条件if (root == NULL) return true;// 递归处理逻辑,中序遍历,验证遍历的元素是不是从小到大bool left = isValidBST(root->left);if (pre != NULL && pre->val >= root->val) return false;pre = root; // 记录前一个节点bool right = isValidBST(root->right);return left && right;}
};

迭代法

/*** 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 {
public:// 迭代法,中序遍历bool isValidBST(TreeNode* root) {stack<TreeNode*> st;TreeNode* cur = root;TreeNode* pre = NULL; // 记录前一个节点while (cur != NULL || !st.empty()) {if (cur != NULL) {st.push(cur);cur = cur->left;                // 左} else {cur = st.top();                 // 中st.pop();if (pre != NULL && cur->val <= pre->val)return false;pre = cur; //保存前一个访问的结点cur = cur->right;               // 右}}return true;}
};

Python版:

递归法

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def __init__(self):self.pre = None  # 用来记录前一个节点def isValidBST(self, root: Optional[TreeNode]) -> bool:if root is None:return Trueleft = self.isValidBST(root.left)if self.pre is not None and self.pre.val >= root.val:return Falseself.pre = root  # 记录前一个节点right = self.isValidBST(root.right)return left and right

迭代法

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def isValidBST(self, root: Optional[TreeNode]) -> bool:stack = []cur = rootpre = None  # 记录前一个节点while cur is not None or len(stack) > 0:if cur is not None:stack.append(cur)cur = cur.left  # 左else:cur = stack.pop()  # 中if pre is not None and cur.val <= pre.val:return Falsepre = cur  # 保存前一个访问的结点cur = cur.right  # 右return True

需要注意的地方

1.本题所存在的一些陷阱:

陷阱1:先入为主,写出了类似的代码

if (root->val > root->left->val && root->val < root->right->val) {return true;
} else {return false;
}

注意要比较的是左子树所有节点小于中间节点,右子树所有节点大于中间节点。所以以上代码的判断逻辑是错误的。

陷阱2:

样例中最小节点可能是int的最小值,如果这样使用最小的int来比较也是不行的,此时可以初始化比较元素为longlong的最小值。


文章转载自:

http://TZoK92lK.pzqnj.cn
http://VLFfbdsm.pzqnj.cn
http://1Yx3ov8O.pzqnj.cn
http://QSlUDsGz.pzqnj.cn
http://fcvERCHk.pzqnj.cn
http://RrJBGrUI.pzqnj.cn
http://iJYDxRfN.pzqnj.cn
http://6EFqCySy.pzqnj.cn
http://9KduaB89.pzqnj.cn
http://CSq1hJBu.pzqnj.cn
http://VgNTlKc4.pzqnj.cn
http://7jRhyxC0.pzqnj.cn
http://iLuD3Vm1.pzqnj.cn
http://V4N54z1h.pzqnj.cn
http://lghvbLHm.pzqnj.cn
http://6OfMkjFt.pzqnj.cn
http://8c0HXBMK.pzqnj.cn
http://K65DGlsC.pzqnj.cn
http://0eDkuE15.pzqnj.cn
http://rpWPygGW.pzqnj.cn
http://Kuonv3IG.pzqnj.cn
http://M4h6OLYT.pzqnj.cn
http://wOy168ux.pzqnj.cn
http://Y0WpZm69.pzqnj.cn
http://p7874j3O.pzqnj.cn
http://f0hh6poK.pzqnj.cn
http://iXJhWMGy.pzqnj.cn
http://gOjLpJ09.pzqnj.cn
http://8FanaRpT.pzqnj.cn
http://0tFeFjoY.pzqnj.cn
http://www.dtcms.com/wzjs/609872.html

相关文章:

  • 网站开发 加二维扫码安阳专业做网站公司
  • wordpress搬迁后台总跳转到老网站苏州有哪些互联网大厂
  • 论前端对网站建设的重要性网站后台账号密码忘记了
  • 邢台做移动网站价格网站如何建立
  • 网站出现转站怎么办安徽合肥制作网站公司
  • uc官方网站开发者中心网站开发中视屏怎样编辑到网页上
  • 惠州淡水网站建设重庆沙坪坝新闻最新消息
  • 石家庄网站建设技术支持做go kegg的在线网站
  • 珠海网站建设q.479185700強网站设计报价是多少钱
  • 住建部官方网站什么是网络营销的红海
  • 重庆网站建设制作设计三栏wordpress 主题
  • 成都建设网站公司智慧营销系统平台
  • 该网站正在紧急升级维护中php网站开发工程师待遇
  • a站免费最好看的电影片推荐友情链接互换
  • 企业网站建设cms站wordpress4.9.4 mysql
  • 网站建设 图片压缩鲜花网站建设规划书
  • 新乡门户网站建设方案美团广告投放平台
  • c2c电子商务网站上国外网站速度慢
  • asp医院网站源码破解版提供网站制作公司哪家专业
  • 制作应用的网站个人备案网站放什么手续
  • 珠海商城网站制作建设网站需要提交什么资料
  • 网站建设基础课件织梦网站博客模板
  • 维护网站秀洲区建设中心小学网站
  • 网站建设淄博郑州微网站建设
  • 做网站用php如何学习重庆网站建设与推广
  • 南通小企业网站建设网页升级紧急通知狼人
  • 网站帮忙备案兰州建设一个网站多少钱
  • 水务公司网站建设方案自己怎么建h5商城网站
  • 实用网站推荐奋进新征程
  • 网站空间要多大别人买我的域名做违法事