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

【leetcode题解C++】98.验证二叉搜索树 and 701.二叉搜索树中的插入操作

98. 验证二叉搜索树

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

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

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

示例 1:

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

示例 2:

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

思路:要验证肯定要遍历,想到如果符合二叉搜索树的话,中序遍历的结果就会是从小到大的,判断一下即可。若需要判断,那么需要加上一个临时结点来记录上一个遍历的结点。

代码实现:

class Solution {
public:bool isValidBST(TreeNode* root) {stack<TreeNode *> stk;TreeNode *cur = root;TreeNode *pre = nullptr;while(cur || !stk.empty()) {if(cur) {stk.push(cur);cur = cur->left;}else {cur = stk.top();stk.pop();if(pre && cur->val <= pre->val) return false;pre = cur;cur = cur->right;}}return true;}
};

701. 二叉搜索树中的插入操作

给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。

注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。

示例 1:

输入:root = [4,2,7,1,3], val = 5
输出:[4,2,7,1,3,5]
解释:另一个满足题目要求可以通过的树是:

示例 2:

输入:root = [40,20,60,10,30,50,70], val = 25
输出:[40,20,60,10,30,50,70,null,null,25]

示例 3:

输入:root = [4,2,7,1,3,null,null,null,null,null,null], val = 5
输出:[4,2,7,1,3,5]

思路:想了想,要是重构二叉树好像有些复杂,这样的话,始终添加为叶子结点就好。那么,还是会用到两个结点,一个cur用于遍历和判断,另一个pre用于在判断找到叶子结点后,再判断添加为左孩子(新节点小)还是右孩子(新节点大)。

代码实现:

class Solution {
public:TreeNode* insertIntoBST(TreeNode* root, int val) {if(root == nullptr) {TreeNode *node = new TreeNode(val);return node;}TreeNode *cur = root;TreeNode *pre = nullptr;while(cur) {pre = cur;if(cur->val > val) cur = cur->left;else if(cur->val <= val) cur = cur->right;}TreeNode *node = new TreeNode(val);if(pre->val > val) pre->left = node;else if(pre->val <= val) pre->right = node;return root;}
};
http://www.lryc.cn/news/293714.html

相关文章:

  • 【Vue.js设计与实现】第二篇:响应系统-阅读笔记(持续更新)
  • 微信小程序之本地生活案例的实现
  • 智能决策的艺术:探索商业分析的最佳工具和方法
  • C#(C Sharp)学习笔记_前言及Visual Studio Code配置C#运行环境【一】
  • 政安晨的AI笔记——Bard大模型最新提示词创作绘画分析
  • 基础算法bfs -剪枝问题
  • 在Meteor Lake上测试基于Stable Diffusion的AI应用
  • 情人节心动礼物:共度情人节美好时刻的礼物推荐
  • 远程手机搭建Termux环境,并通过ssh连接Termux
  • 基于EdgeWorkers的边缘应用如何进行单元测试?
  • 【linux】校招中的“熟悉linux操作系统”一般是指达到什么程度?
  • 【CSS系列】常用容易忽略的css
  • Java 数据结构 二叉树(二)红黑树
  • React18-完成弹窗封装
  • 蓝桥杯2024/1/31-----底层测试模板
  • 蓝桥杯备战(AcWing算法基础课)-高精度-乘-低精度
  • C++设计模式-里氏替换原则
  • compose LazyColumn + items没有自动刷新问题
  • Java八大常用排序算法
  • 编程笔记 html5cssjs 075 Javascript 常量和变量
  • 题目 1159: 偶数求和
  • 呼吸灯--FPGA
  • MySQL数据库①_MySQL入门(概念+使用)
  • 虚幻UE 特效-Niagara特效实战-魔法阵
  • Qt多语言翻译
  • Latex学习记录
  • 你在做绩效考核,还是绩效管理?二者有什么区别
  • ele-h5项目使用vue3+vite+vant4开发:第四节、业务组件-SearchView组件开发
  • C系列-柔性数组
  • 【Linux网络编程一】网络基础1(网络框架)