【题解】二叉树的镜像、判断是不是二叉搜索树

news/2024/11/20 4:36:11/

文章目录

  • 二叉树的镜像
  • 判断是不是二叉搜索树

二叉树的镜像

题目链接:二叉树的镜像

解题思路1:递归

对于树的问题,我们可以把整体看作一棵树,把左右子树看作独立的树进行操作,所以对于树的问题,一般情况下都可以考虑用递归来解决

题目代码:

后序版本:

class Solution {
public:TreeNode* Mirror(TreeNode* pRoot) {//空树返回if(pRoot == nullptr) return nullptr;//递归子树TreeNode* left = Mirror(pRoot->left);TreeNode* right = Mirror(pRoot->right);TreeNode* temp = pRoot->left;pRoot->left = pRoot->right;pRoot->right = temp;return pRoot;}
};

先序版本:

class Solution {
public:TreeNode* Mirror(TreeNode* pRoot) {//空树返回if(pRoot == nullptr) return nullptr;//递归子树TreeNode* temp = pRoot->left;pRoot->left = pRoot->right;pRoot->right = temp;TreeNode* left = Mirror(pRoot->left);TreeNode* right = Mirror(pRoot->right);return pRoot;}
};

解法二:深度优先遍历,我们可以借助栈来对二叉树进行遍历

class Solution {
public:TreeNode* Mirror(TreeNode* pRoot) {if(pRoot == nullptr) return nullptr;stack<TreeNode*> s;s.push(pRoot);while(!s.empty()){TreeNode* node = s.top();s.pop();if(node->left) s.push(node->left);if(node->right) s.push(node->right);TreeNode* temp = node->right;node->right = node->left;node->left = temp;}return pRoot;}
};

判断是不是二叉搜索树

题目链接:判断是不是二叉搜索树

解题思路:递归

排除所有非二叉搜索树的情况,反向返回

class Solution {
public:
//中序遍历判断long pre = INT_MIN;bool isValidBST(TreeNode* root) {if(root == nullptr) return true;//进入左子树if(!isValidBST(root->left)) return false;if(root->val <= pre) return false;//更新pre值pre = root->val;//进入右子树if(!isValidBST(root->right)) return false;return true;}
};

解题思路2:借助栈来实现遍历,借助数组来保存中序遍历结果,对数组中中序遍历的结果进行比较

二叉搜索树非常特征的一个特征就是二叉搜索树的中序遍历结果是递增的

代码如下:

class Solution {
public:
//利用栈bool isValidBST(TreeNode* root) {stack<TreeNode*> s;//辅助栈vector<int> v;//保存中序遍历结果while(root!=nullptr || !s.empty()){while(root != nullptr) {s.push(root);root = root->left;}TreeNode* node = s.top();v.push_back(node->val);s.pop();//进入右节点root = node->right;}int n = v.size();for(int i=0; i<n-1; ++i){if(v[i+1] <= v[i]) return false;}return true;}
};

http://www.ppmy.cn/news/1112829.html

相关文章

数据仓库模型设计V2.0

一、数仓建模的意义 数据模型就是数据组织和存储方法&#xff0c;它强调从业务、数据存取和使用角度合理存储数据。只有将数据有序的组织和存储起来之后&#xff0c;数据才能得到高性能、低成本、高效率、高质量的使用。 高性能&#xff1a;良好的数据模型能够帮助我们快速查询…

用c++实现五子棋小游戏

五子棋是一款经典小游戏&#xff0c;今天我们就用c实现简单的五子棋小游戏 目录 用到的算法&#xff1a; 思路分析 定义变量 开始写代码 完整代码 结果图&#xff1a; 用到的算法&#xff1a; 合法移动的判断&#xff1a;isValidMove 函数通过检查指定位置是否在棋盘范…

vscode如何设置文件折叠

随着项目的不断迭代开发&#xff0c;复杂度越来越高&#xff0c;配置文件越来越多&#xff0c;导致vscode左侧文件列表展示非常不直观&#xff0c;幸好可以通过文件折叠来简化展示效果&#xff0c;把同类相关的文件折叠在一块展示&#xff0c;方便查看配置文件。配置好后的效果…

Springboot -- DOCX转PDF(二)

之前记录了按照模板生成 DOCX 文件、并转换为 PDF 文件的方法 https://blog.csdn.net/qq_40096897/article/details/131979177?spm1001.2014.3001.5501 但是使用效果并不是很理想&#xff0c;转换完的 PDF 格式和原本的文档格式不匹配。所以在此重新找了一个文件转 PDF 的方法…

构建模型三要素与权重初始化

1、模型三要素 三要素其实很简单&#xff1a; 必须要继承nn.Module这个类&#xff0c;要让PyTorch知道这个类是一个Module。在__init__(self)中设置好需要的组件&#xff0c;比如conv,pooling,Linear,BatchNorm等等。最后在forward(self,x)中用定义好的组件进行组装&#xff…

WebRTC 如何指定 H265解码器

WebRTC 本身支持多种视频编解码器&#xff0c;但 H.265/HEVC 编解码器的支持主要取决于浏览器或应用的实现。不过&#xff0c;如果你确定你的 WebRTC 实现和对端支持 H.265&#xff0c;可以通过修改 SDP 来优先选择 H.265 编解码器。 以下是如何指定 H.265 作为优先解码器的基…

elasticsearch6-RestClient操作文档

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

数组相关面试题

1、原地移除数组中所有的元素val&#xff0c;要求时间复杂度为O(N),空间复杂度为O(1)。 OJ链接&#xff1a;27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 分析&#xff1a; 法1&#xff1a;挪到数据&#xff0c;思路如顺序表的头删&#xff0c;将后面的数据向前挪动将…