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

相关推荐
Hical_W1 天前
C++ 也能优雅写 Web?5 分钟用 Hical 搭建 REST API
开发语言·c++·github
历程里程碑1 天前
55 Linux epoll高效IO实战指南
java·linux·服务器·开发语言·前端·javascript·c++
️是781 天前
信息奥赛一本通—编程启蒙(3373:练64.2 图像旋转翻转变换)
数据结构·c++·算法
云深麋鹿1 天前
C++ | 容器stack&queue
开发语言·c++
Xiu Yan1 天前
Java 转 C++ 系列:STL容器之list
java·开发语言·数据结构·c++·stl·list·visual studio
木子墨5161 天前
LeetCode 热题 100 精讲 | 计算几何篇:点积叉积 · 线段相交 · 凸包 · 多边形面积
c++·算法·leetcode·职场和发展·动态规划
源码之家1 天前
计算机毕业设计:Python棉花产业数据可视化与预测系统 Django框架 ARIMA算法 数据分析 可视化 爬虫 大数据 大模型(建议收藏)✅
人工智能·python·算法·信息可视化·数据挖掘·django·课程设计
py有趣1 天前
力扣热门100题之最小路径和
算法·leetcode
qeen871 天前
【算法笔记】前缀和经典题目解析
c语言·c++·笔记·学习·算法
橙子也要努力变强1 天前
信号捕捉与不可捕捉机制(进阶篇)
linux·服务器·c++