C++二叉树剪枝

C++二叉树剪枝

📟作者主页:慢热的陕西人

🌴专栏链接:力扣刷题日记

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言

文章目录

题目链接

LCR 047. 二叉树剪枝 - 力扣(LeetCode)

题目描述

给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1。请剪除该二叉树中所有节点的值为 0 的子树。

节点 node 的子树为 node 本身,以及所有 node 的后代。

解题思路

首先我们分为三步

①函数头

首先我们应该想到我们去递归解答这道题目,函数的参数非常好确认就是TreeNode* root即可。

函数的返回值:根据题目的意思我们要将那些全零的子树全部在树中删除,那么我们最好是返回一个TreeNode*即可。

②函数体

我们要实现的肯定是一个深度优先遍历dfs,那么

(1)dfs(root->left);

(2)dfs(root->right);

(3) 处理当前root

③截止条件

当我们深度历到root == nullptr为空的时候

代码

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)
            root = nullptr;

        return root;
    }
}

复杂度分析

时间复杂度:

dfs时间复杂度为O(N);

空间复杂度:

未使用额外的空间,空间复杂度为:O(1);

相关推荐
码流之上6 分钟前
【一看就会一写就废 指间算法】设计电子表格 —— 哈希表、字符串处理
javascript·算法
快手技术2 小时前
快手提出端到端生成式搜索框架 OneSearch,让搜索“一步到位”!
算法
感哥3 小时前
C++ 多重继承
c++
博笙困了3 小时前
C++提高编程 4.0
c++
扑克中的黑桃A3 小时前
[C语言]第三章-数据类型&变量
c++
感哥4 小时前
C++ std::string
c++
感哥20 小时前
C++ 面向对象
c++
CoovallyAIHub1 天前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
沐怡旸1 天前
【底层机制】std::shared_ptr解决的痛点?是什么?如何实现?如何正确用?
c++·面试
NAGNIP1 天前
Serverless 架构下的大模型框架落地实践
算法·架构