每日OJ题_二叉树dfs③_力扣814. 二叉树剪枝

目录

[力扣814. 二叉树剪枝](#力扣814. 二叉树剪枝)

解析代码


力扣814. 二叉树剪枝

814. 二叉树剪枝

难度 中等

给你二叉树的根结点 root ,此外树的每个结点的值要么是 0 ,要么是 1

返回移除了所有不包含 1 的子树的原二叉树。

节点 node 的子树为 node 本身加上所有 node 的后代。

示例 1:

复制代码
输入:root = [1,null,0,0,1]
输出:[1,null,0,null,1]
解释:
只有红色节点满足条件“所有不包含 1 的子树”。 右图为返回的答案。

示例 2:

复制代码
输入:root = [1,0,1,0,0,0,1]
输出:[1,null,1,null,1]

示例 3:

复制代码
输入:root = [1,1,0,1,1,0,1,0]
输出:[1,1,0,1,1,null,1]

提示:

  • 树中节点的数目在范围 [1, 200]
  • Node.val01
cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* pruneTree(TreeNode* root) {
        
    }
};

解析代码

题意就是删除所有元素只有0的子树,解题思路就是递归+后序遍历:

相信递归一定能把左右子树都剪枝了,出口是碰到叶子结点,函数体是如果这个结点的左结点和右结点都为空,并且值为0,就剪掉。

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* pruneTree(TreeNode* root) {
        /*
        题意就是删除所有元素只有0的子树,解题思路就是递归+后序遍历:
        相信递归一定能把左右子树都剪枝了,出口是碰到叶子结点,
        函数体是如果这个结点的左结点和右结点都为空,并且值为0,就剪掉。
        */
        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 分钟前
斐波那契黄金分割自然界演化以及金融上的共振?
算法·金融
灰色小旋风7 分钟前
力扣第1题:两数之和(C++)
c++·算法
民乐团扒谱机9 分钟前
机器学习 第二弹 和AI斗智斗勇 机器学习核心知识点全解析(GBDT/XGBoost/LightGBM/随机森林+调参方法)
算法·决策树·机器学习
智驱力人工智能12 分钟前
实线变道检测 高架道路安全治理的工程化实践 隧道压实线监测方案 城市快速路压实线实时预警 压实线与车牌识别联动方案
人工智能·opencv·算法·安全·yolo·边缘计算
We་ct15 分钟前
LeetCode 3. 无重复字符的最长子串:滑动窗口最优解演进与解析
前端·算法·leetcode·typescript
沉默-_-16 分钟前
备战蓝桥杯--栈
数据结构·算法·力扣·
XH华16 分钟前
备战蓝桥杯,第六章:C++语言的输入输出(下)
c++·职场和发展·蓝桥杯
weixin1997010801617 分钟前
B2Bitem_get - 获取商标详情接口对接全攻略:从入门到精通
java·大数据·算法
赤水无泪27 分钟前
03 C++语言---预处理器
开发语言·c++
李余博睿(新疆)28 分钟前
c++三级
c++