leetcode算法题之递归--二叉树中的深搜总结

递归的本质是找重复的子问题

文章目录

1.计算布尔二叉树的值

计算布尔二叉树的值

cpp 复制代码
class Solution {
public:
    bool evaluateTree(TreeNode* root) {
        if(root->left == nullptr) return root->val == 0?false:true;
        bool left = evaluateTree(root->left);
        bool right = evaluateTree(root->right);
        return root->val == 2? left|right:left&right; 
    }
};

2.从根节点到叶节点数字之和

从根节点到叶节点数字之和

cpp 复制代码
class Solution {
public:
    int sumNumbers(TreeNode* root) {
        return dfs(root,0);
    }
    int dfs(TreeNode* root,int prevsum)
    {
        prevsum = prevsum*10+root->val;
        if(root->left == nullptr && root->right == nullptr) return prevsum;
        int ret = 0;
        if(root->left) ret += dfs(root->left,prevsum);
        if(root->right) ret += dfs(root->right,prevsum);
        return ret;
    }
};

3.二叉树剪枝

二叉树剪枝

cpp 复制代码
class Solution {
public:
    TreeNode* pruneTree(TreeNode* root) {
        //后序遍历
        if(root == nullptr) return nullptr;
        root->left = pruneTree(root->left);
        root->right = pruneTree(root->right);
        if(root->left == nullptr && root->right == nullptr && root->val == 0)
        {
            //delete root;//防止内存泄漏,前提是节点是new出来的
            root = nullptr;
        }
        return root;
    }
};

4.验证二叉搜索树

验证二叉搜索树

cpp 复制代码
class Solution {
//性质:二叉搜索树的中序遍历是一个有序的序列
    long prev = LONG_MIN;
public:
    bool isValidBST(TreeNode* root) {
        if(root == nullptr) return true;
        bool left = isValidBST(root->left);
        if(left == false) return false;
        bool cur = false;
        if(root->val>prev)
        {
            cur = true;
        }
        if(cur == false) return false;
        prev = root->val;
        bool right = isValidBST(root->right);
        return left && right && cur;
    }
};

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

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

cpp 复制代码
class Solution {
//性质:二叉搜索树的中序遍历是一个有序的序列
    int count;
    int ret;
public:
    int kthSmallest(TreeNode* root, int k) {
        count = k;
        dfs(root);
        return ret;
    }
    void dfs(TreeNode* root)
    {
        if(root == nullptr || count == 0) return;
        dfs(root->left);
        count --;
        if(count == 0) ret = root->val;
        dfs(root->right);
    }
};

6.二叉树的所有路径

二叉树的所有路径

cpp 复制代码
class Solution {
    vector<string> ret;
public:
    //递归+回溯
    vector<string> binaryTreePaths(TreeNode* root) {
        string path;
        dfs(root,path);
        return ret;
    }
    void dfs(TreeNode* root,string path)
    {
        path = path+to_string(root->val);
        if(root->left == nullptr && root->right == nullptr)
        {
            ret.push_back(path);
        }
        path += "->";
        if(root->left) dfs(root->left,path);
        if(root->right) dfs(root->right,path);
    }
};

有什么不懂的可以后台直接私信我嗷!

相关推荐
独好紫罗兰4 分钟前
洛谷题单3-P1009 [NOIP 1998 普及组] 阶乘之和-python-流程图重构
开发语言·python·算法
曦月逸霜16 分钟前
蓝桥杯高频考点——高精度(含C++源码)
c++·算法·蓝桥杯
ゞ 正在缓冲99%…25 分钟前
leetcode152.乘积最大子数组
数据结构·算法·leetcode
独行soc1 小时前
2025年渗透测试面试题总结-某腾某讯-技术安全实习生升级(题目+回答)
java·python·安全·web安全·面试·职场和发展·红蓝攻防
闯闯爱编程1 小时前
数组与特殊压缩矩阵
数据结构·算法·矩阵
秋风战士1 小时前
通信算法之255:无人机频谱探测设备技术详解
算法·无人机
测试界柠檬2 小时前
15:00开始面试,15:08就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
laimaxgg2 小时前
数据结构B树的实现
开发语言·数据结构·c++·b树·算法
mit6.8242 小时前
[Lc6_记忆化搜索] 最长递增子序列 | 矩阵中的最长递增路径
c++·算法·leetcode
Y1nhl3 小时前
搜广推校招面经六十四
人工智能·深度学习·leetcode·广告算法·推荐算法·搜索算法