LeetCode Q 814 - Binary Tree Pruning
We are given the head node root of a binary tree, where additionally every node’s value is either a 0
or a 1
.
Return the same tree where every subtree (of the given tree) not containing a 1 has been removed.
(Recall that the subtree of a node X
is X
, plus every node that is a descendant of X
.)
Example 1: Input: [1,null,0,0,1] ; Output: [1,null,0,null,1]
Example 2: Input: [1,0,1,0,0,0,1] ; Output: [1,null,1,null,1]
Example 3: Input: [1,1,0,1,1,0,1,0] ; Output: [1,1,0,1,1,null,1]
Note:
- The binary tree will have at most 100 nodes.
- The value of each node will only be 0 or 1.
Solution:
Code: DFS
public TreeNode pruneTree(TreeNode root) {
return dfs(root, root);
}
private TreeNode dfs(TreeNode n, TreeNode p) {
if (n == null) return null;
TreeNode l = dfs(n.left, n);
TreeNode r = dfs(n.right, n);
if (l == null && r == null && n.val == 0) {
if (p.left == n) p.left = null;
else p.right == null;
return null;
}
return n;
}
Code: Recursino
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;
}