Skip to content

Latest commit

 

History

History
104 lines (77 loc) · 2.6 KB

File metadata and controls

104 lines (77 loc) · 2.6 KB

Problem #814 (Binary Tree Pruning | Tree, Depth-First Search, Binary Tree)

Given the root of a binary tree, return the same tree where every subtree (of the given tree) not containing a 1 has been removed.

A subtree of a node node is node plus every node that is a descendant of node.

Example 1

image

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.

Example 2

image

Input:

root = [1,0,1,0,0,0,1]

Output:

[1,null,1,null,1]

Example 3

image

Input:

root = [1,1,0,1,1,0,1,0]

Output:

[1,1,0,1,1,null,1]

Constraints

  • The number of nodes in the tree is in the range [1, 200].
  • Node.val is either 0 or 1.

Solutions

1. Depth-First Search (Recursive)

Codes

  • Java
class Solution {
    public TreeNode pruneTree(TreeNode root) {
        if(root == null) return null;
        root.left = pruneTree(root.left);
        root.right = pruneTree(root.right);
        if(root.left == null && root.right == null && root.val== 0) return null;
        return root;
    }
}

image

  • *C++
class Solution {
public:
    TreeNode* pruneTree(TreeNode* root) {
        if(!root) return NULL;
        root->left = pruneTree(root->left);
        root->right = pruneTree(root->right);
        if(!root->left && !root->right && root->val == 0) return NULL;
        return root;
    }
};

image

  • Python
class Solution(object):
    def pruneTree(self, root):
        if not root: return None
        root.left = self.pruneTree(root.left)
        root.right = self.pruneTree(root.right)
        if not root.left and not root.right and root.val == 0: return None
        return root

image

Complexity

  • Time: O(log n)
  • Space: O(1)