Advertisement
1988coder

968. Binary Tree Cameras

Jan 1st, 2019
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.31 KB | None | 0 0
  1. /**
  2.  * Definition for a binary tree node.
  3.  * public class TreeNode {
  4.  *     int val;
  5.  *     TreeNode left;
  6.  *     TreeNode right;
  7.  *     TreeNode(int x) { val = x; }
  8.  * }
  9.  */
  10. /**
  11.  * Refer:
  12.  * https://leetcode.com/problems/binary-tree-cameras/discuss/211180/JavaC++Python-Greedy-DFS
  13.  *
  14.  * Time Complexity: O(N)
  15.  *
  16.  * Space Complexity: O(N)
  17.  *
  18.  * N = Number of node in the tree.
  19.  */
  20. class Solution {
  21.     public int minCameraCover(TreeNode root) {
  22.         if (root == null) {
  23.             return 0;
  24.         }
  25.  
  26.         int[] count = new int[1];
  27.         int finalState = dfsHelper(root, count);
  28.         if (finalState == 0) {
  29.             count[0]++;
  30.         }
  31.  
  32.         return count[0];
  33.     }
  34.  
  35.     // State 0 = Uncovered
  36.     // State 1 = Covered and Camera Here
  37.     // State 2 = Covered and Camera NOT Here
  38.     // For NULL... Since there is no node, its covered but there is no camera.
  39.     private int dfsHelper(TreeNode node, int[] count) {
  40.         if (node == null) {
  41.             return 2;
  42.         }
  43.  
  44.         int left = dfsHelper(node.left, count);
  45.         int right = dfsHelper(node.right, count);
  46.  
  47.         if (left == 0 || right == 0) {
  48.             count[0]++;
  49.             return 1;
  50.         }
  51.         if (left == 1 || right == 1) {
  52.             return 2;
  53.         }
  54.         return 0;
  55.     }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement