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);
    }
};

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

相关推荐
ZhengEnCi7 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
秋天的怀念_David7 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Pniubi8 小时前
力扣283移动零(双指针法)
算法·leetcode·职场和发展
hhb_6188 小时前
大模型落地三重优化实战
人工智能·算法·机器学习
云和数据.ChenGuang8 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
2601_9707038310 小时前
工业除湿机租赁:把一份租金合同拆开看
大数据·数据结构·算法·数据库架构·推荐算法
心中有你021410 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
ZhengEnCi11 小时前
同样的模型,为什么本地和云 API 差别那么大:量化精度、聊天模板与采样参数的三大元凶
人工智能·算法·llm
Flynn Liang11 小时前
RAG 答非所问/幻觉怎么破?Spring AI QuestionAnswerAdvisor 召回优化实战(TopK/重排/混合检索)
人工智能·算法·spring·rag·幻觉·springai
liminla!11 小时前
SQL 从入门到进阶:语法速查与实战练习(完整优化版)
数据库·sql·算法