首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【LeetCode 热题 100】二叉树的最大深度 / 翻转二叉树 / 二叉树的直径 / 验证二叉搜索树

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

作者头像
_小羊_
发布2025-05-14 09:08:46
发布2025-05-14 09:08:46
1570
举报
文章被收录于专栏:C++C++

二叉树的中序遍历

代码语言:javascript
复制
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
复制
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
复制
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
复制
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
复制
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
复制
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
复制
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
复制
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
复制
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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二叉树的中序遍历
  • 二叉树的最大深度
  • 翻转二叉树
  • 对称二叉树
  • 二叉树的直径
  • 二叉树的层序遍历
  • 将有序数组转换为二叉搜索树
  • 验证二叉搜索树
  • 二叉搜索树中第 K 小的元素
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档