Binary Tree Pruning

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;
}

   Reprint policy


《Binary Tree Pruning》 by Tong Shi is licensed under a Creative Commons Attribution 4.0 International License
  TOC