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

相关推荐
爪哇部落算法小助手1 分钟前
每日两题day44
算法
不穿格子的程序员1 小时前
从零开始写算法——二分-搜索二维矩阵
线性代数·算法·leetcode·矩阵·二分查找
龙泉寺天下行走1 小时前
MinGW-w64 工具链(GCC 编译器) 的不同构建版本的区别
c++
Kuo-Teng2 小时前
LeetCode 19: Remove Nth Node From End of List
java·数据结构·算法·leetcode·链表·职场和发展·list
Kuo-Teng2 小时前
LeetCode 21: Merge Two Sorted Lists
java·算法·leetcode·链表·职场和发展
代码AC不AC2 小时前
【C++】异常
c++·学习·异常
2301_800399722 小时前
stm32 printf重定向到USART
java·stm32·算法
小龙报2 小时前
《嵌入式成长系列之51单片机 --- Keil5创建工程》
c语言·开发语言·c++·单片机·嵌入式硬件·51单片机·学习方法
9ilk2 小时前
【基于one-loop-per-thread的高并发服务器】--- 项目测试
运维·服务器·c++·后端·中间件
无限进步_2 小时前
【C语言】贪吃蛇游戏设计思路深度解析:从零开始理解每个模块
c语言·开发语言·c++·git·游戏·github·visual studio