814. Binary Tree Pruning

LeetCode original: C# #csharp #leetcode #tree #two-pointers
El texto de la tarea se traduce del ruso para el idioma seleccionado. El código no cambia.

: medium

Дан корень бинарного дерева. return то же árbol, в котором удалены все поддеревья (данного дерева), не содержащие 1.

Подárbol узла node - это сам узел node и все узлы, являющиеся потомками node.

Ejemplo:

Input: root = [1,null,0,0,1]

Output: [1,null,0,null,1]

Explanation:

Only the red nodes satisfy the property "every subtree not containing a 1".

The diagram on the right represents the answer.

C# solución

coincidente/original
public class TreeNode {
    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}
public class Solution {
    public TreeNode PruneTree(TreeNode root) {
        return ContainsOne(root) ? root : null;
    }
    private bool ContainsOne(TreeNode node) {
        if (node == null) return false;
        bool leftContainsOne = ContainsOne(node.left);
        bool rightContainsOne = ContainsOne(node.right);
        if (!leftContainsOne) node.left = null;
        if (!rightContainsOne) node.right = null;
        return node.val == 1 || leftContainsOne || rightContainsOne;
    }
}

C++ solución

borrador automático, revisar antes de enviar
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
public class TreeNode {
    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}
class Solution {
public:
    public TreeNode PruneTree(TreeNode root) {
        return ContainsOne(root) ? root : null;
    }
    private bool ContainsOne(TreeNode node) {
        if (node == null) return false;
        bool leftContainsOne = ContainsOne(node.left);
        bool rightContainsOne = ContainsOne(node.right);
        if (!leftContainsOne) node.left = null;
        if (!rightContainsOne) node.right = null;
        return node.val == 1 || leftContainsOne || rightContainsOne;
    }
}

Java solución

coincidente/original
class Solution {
    public TreeNode pruneTree(TreeNode root) {
        return containsOne(root) ? root : null;
    }

    private boolean containsOne(TreeNode node) {
        if (node == null) return false;
        
        boolean leftContainsOne = containsOne(node.left);
        boolean rightContainsOne = containsOne(node.right);

        if (!leftContainsOne) node.left = null;
        if (!rightContainsOne) node.right = null;
        
        return node.val == 1 || leftContainsOne || rightContainsOne;
    }

JavaScript solución

coincidente/original
var pruneTree = function(root) {
    if (containsOne(root)) {
        return root;
    }
    return null;
};

var containsOne = function(node) {
    if (!node) return false;

    let leftContainsOne = containsOne(node.left);
    let rightContainsOne = containsOne(node.right);

    if (!leftContainsOne) node.left = null;
    if (!rightContainsOne) node.right = null;

    return node.val === 1 || le

Python solución

coincidente/original
class Solution:
    def pruneTree(self, root):
        def containsOne(node):
            if not node:
                return False
            
            leftContainsOne = containsOne(node.left)
            rightContainsOne = containsOne(node.right)
            
            if not leftContainsOne:
                node.left = None
            if not rightContainsOne:
                node.right = None
            
            return node.val == 1 or leftContainsOne or rightContainsOne
        
        return root if containsOne(root) else None

Algorithm

Используем функцию containsOne(node), которая сообщает, содержит ли подárbol в данном узле единицу, и обрезает все поддеревья, не содержащие единицу.

НаEjemplo, если подárbol node.left не содержит единицу, то мы должны обрезать его через node.left = null.

Также нужно проверить родительский узел. НаEjemplo, если árbol состоит из одного узла 0, то ответом будет пустое árbol.

😎

Vacantes para esta tarea

Se muestran vacantes activas con etiquetas coincidentes.

Todas las vacantes
Todavía no hay vacantes activas.