Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【LeetCode 热题 100】二叉树的最大深度 / 翻转二叉树 / 二叉树的直径 / 验证二叉搜索树

【LeetCode 热题 100】二叉树的最大深度 / 翻转二叉树 / 二叉树的直径 / 验证二叉搜索树

作者头像
_小羊_
发布于 2025-05-14 01:08:46
发布于 2025-05-14 01:08:46
2400
代码可运行
举报
文章被收录于专栏:C++C++
运行总次数:0
代码可运行

二叉树的中序遍历

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    vector<int> res;
public:
    vector<int> inorderTraversal(TreeNode* root) {
        dfs(root);
        return res;
    }
    void dfs(TreeNode* root)
    {
        if (root == nullptr) return;
        dfs(root->left);
        res.push_back(root->val);
        dfs(root->right);
    }
};

二叉树的最大深度

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    int maxDepth(TreeNode* root) {
        if (root == nullptr) return 0;
        int left = maxDepth(root->left);
        int right = maxDepth(root->right);
        return left > right ? left + 1 : right + 1;
    }
};

翻转二叉树

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if (root == nullptr) return nullptr;
        TreeNode *left = invertTree(root->left);
        TreeNode *right = invertTree(root->right);
        root->left = right;
        root->right = left;
        return root;
    }
};

对称二叉树

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        return dfs(root->left, root->right);
    }
    bool dfs(TreeNode* left, TreeNode* right)
    {
        if (left && right)
        {
            if (left->val != right->val) return false;
            return dfs(left->left, right->right) && dfs(left->right, right->left);
        }
        else if (left != right) return false;
        else return true;
    }
};

二叉树的直径

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    int depth;
public:
    int diameterOfBinaryTree(TreeNode* root) {
        dfs(root);
        return depth - 1;
    }
    int dfs(TreeNode* root)
    {
        if (root == nullptr) return 0;
        int left = dfs(root->left);
        int right = dfs(root->right);
        depth = max(depth, left + right + 1);
        return max(left, right) + 1;
    }
};

二叉树的层序遍历

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> res;
        queue<TreeNode*> q;
        if (root == nullptr) return res;
        q.push(root);
        while (q.size())
        {
            int sz = q.size();
            vector<int> tmp;
            while (sz--)
            {
                TreeNode *node = q.front();
                tmp.push_back(node->val);
                q.pop();
                if (node->left) q.push(node->left);
                if (node->right) q.push(node->right);
            }
            res.push_back(tmp);
        }
        return res;
    }
};

将有序数组转换为二叉搜索树

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return dfs(nums, 0, nums.size() - 1);
    }
    TreeNode* dfs(vector<int>& nums, int l, int r)
    {
        if (l > r) return nullptr;
        int mid = l + (r - l) / 2;
        TreeNode* node = new TreeNode(nums[mid]);
        node->left = dfs(nums, l, mid - 1);
        node->right = dfs(nums, mid + 1, r);
        return node;
    }
};

验证二叉搜索树

递归遍历。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    bool isValidBST(TreeNode* root) {
        return dfs(root, LONG_MIN, LONG_MAX);
    }
    bool dfs(TreeNode* root, long min_val, long max_val)
    {
        if (root == nullptr) return true;
        if (root->val <= min_val || root->val >= max_val) return false;
        return dfs(root->left, min_val, root->val) 
            && dfs(root->right, root->val, max_val);
    }
};

前序遍历。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    long prev = LONG_MIN;
public:
    bool isValidBST(TreeNode* root) {
        if (root == nullptr) return true;
        if (isValidBST(root->left) == false) return false;
        if (root->val <= prev) return false;
        prev = root->val; 
        return isValidBST(root->right);
    }
};

二叉搜索树中第 K 小的元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    int res, cnt;
public:
    int kthSmallest(TreeNode* root, int k) {
        cnt = k;
        dfs(root);
        return res;
    }
    void dfs(TreeNode* root)
    {
        if (root == nullptr) return;
        dfs(root->left);
        if (--cnt == 0) 
        {
            res = root->val;
            return;
        }
        dfs(root->right);
    }
};

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
DFS基础问题-LeetCode 98、101(二叉树中序遍历,层次遍历)
假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。
算法工程师之路
2019/09/17
8100
【leetcode刷题】T112-验证二叉搜索树
节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。
木又AI帮
2019/07/17
5170
验证二叉搜索树
狼啸风云
2023/11/25
1220
验证二叉搜索树
​LeetCode刷题实战98:验证二叉搜索树
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
2990
​LeetCode刷题实战98:验证二叉搜索树
二叉树问题(一)-LeetCode 110、617、101、814、655、98、654(递归思路)
给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1
算法工程师之路
2019/12/24
4750
c++ LeetCode (网易面试题和链表以及树篇) 五道算法例题代码详解(三)
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
徐飞机
2019/09/23
1K0
c++ LeetCode (网易面试题和链表以及树篇)  五道算法例题代码详解(三)
【DFS】汉诺塔问题 / 反转链表 / 求根节点到叶节点数字之和 / 验证二叉搜索树
要将a柱上n个的盘子借助b柱放到c柱上,应该先将a柱上的n-1个盘子借助c放到b上,然后再将b柱上的n-1个盘子借助a柱放到c柱上,以此往复。
_小羊_
2025/04/09
1090
【DFS】汉诺塔问题 / 反转链表 / 求根节点到叶节点数字之和 / 验证二叉搜索树
【算法专题】二叉树中的深搜(DFS)
深度优先遍历(DFS,全称为 Depth First Traversal),是我们树或者图这样的数据结构中常用的⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分支,直到一条路径上的所有节点都被遍历完毕,然后再回溯到上一层,继续找⼀条路遍历。
YoungMLet
2024/03/01
2900
二叉树-LeetCode 235、236、226、230(中序,LCA,DFS)
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]
算法工程师之路
2019/11/26
4990
【leetcode刷题】T136-二叉搜索树中的众数
https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/
木又AI帮
2019/08/08
3430
每日三题-验证二叉搜索树、二叉树的直径、把二叉搜索树转换为累加树
👨‍💻个人主页: 才疏学浅的木子 🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️ 📒 本文来自专栏: 算法 🌈 算法类型:Hot100题 🌈 ❤️ 支持我:👍点赞 🌹收藏 🤟关注 每日三题 验证二叉搜索树 二叉树的直径 把二叉搜索树转换为累加树 验证二叉搜索树 解法一 递归 每次判断cur是否在left与right之间 class Solution { public boolean isValidBST(TreeNode root) {
才疏学浅的木子
2022/11/18
2080
每日三题-验证二叉搜索树、二叉树的直径、把二叉搜索树转换为累加树
判断是不是一棵二叉搜索树!
题目地址:https://leetcode-cn.com/problems/validate-binary-search-tree/
代码随想录
2021/09/08
4570
判断是不是一棵二叉搜索树!
二叉树abcdefghij先序遍历_二叉树后序遍历的非递归算法
节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。
全栈程序员站长
2022/09/22
2350
二叉树abcdefghij先序遍历_二叉树后序遍历的非递归算法
【二叉树的深搜】你是怎么样验证二叉搜索树的?
​ 看到二叉搜索树,就想到一个特性,二叉搜索树的中序遍历是一个有序序列!所以我们可以立马想到用一个数组来存放中序遍历的结果,然后判断一下序列是否有序即可,这样子做的时间复杂度为 O(n)。
利刃大大
2025/02/03
1100
【二叉树的深搜】你是怎么样验证二叉搜索树的?
LeetCode 恢复二叉搜索树(二叉树)
给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。 进阶:使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用常数空间的解决方案吗?
SakuraTears
2022/01/13
1750
【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路
用户11286421
2024/11/21
4060
【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路
深入了解二叉搜索树:原理、操作与应用
二叉搜索树的概念:满足左子树的值小于根节点,右子树的值大于根节点的值,这样的树就是二叉搜索树
用户11305458
2024/10/09
1560
深入了解二叉搜索树:原理、操作与应用
二叉搜索树在线OJ题讲解
我们首先进行题目的解读: 大概意思就是用()把每个节点的值给括起来,然后再经过一系列的省略的来得到最后的结果
ahao
2024/03/19
860
二叉搜索树在线OJ题讲解
合并多棵二叉搜索树
给你 n 个 二叉搜索树的根节点 ,存储在数组 trees 中(下标从 0 开始),对应 n 棵不同的二叉搜索树。trees 中的每棵二叉搜索树 最多有 3 个节点 ,且不存在值相同的两个根节点。在一步操作中,将会完成下述步骤:
学习起来吧
2024/03/23
1650
合并多棵二叉搜索树
二叉树常见算法总结和C++实现
DFS深度搜索(从上到下)和分治法区别:前者一般将最终结果通过引用参数传入,或者一般递归返回结果最终合并
evenleo
2020/08/21
1K0
推荐阅读
相关推荐
DFS基础问题-LeetCode 98、101(二叉树中序遍历,层次遍历)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验