LeetCode:814. 二叉树剪枝【递归】

题目描述

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

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

节点 node 的子树为 node 本身加上所有 node 的后代。
LeetCode:814. 二叉树剪枝【递归】_第1张图片

输入与输出

输入:root = [1,null,0,0,1]
输出:[1,null,0,null,1]

提示

  • 树中节点的数目在范围 [1, 200] 内
  • Node.val 为 0 或 1

思路

只有当当前节点为0,且左右子树为空时,才能被删除。于是我们可以用递归删除的方法,将这些节点置为空。

AC代码

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 && !root->right && !root->val) {
            return nullptr;
        }
        return root;
    }
};

你可能感兴趣的:(算法刷题库,leetcode,剪枝,算法)