1261. Find Elements in a Contaminated Binary Tree

Difficulty:
Related Topics:
Similar Questions:

    Problem

    Given a binary tree with the following rules:

    Now the binary tree is contaminated, which means all treeNode.val have been changed to -1.

    Implement the FindElements class:

      Example 1:

    Input
    ["FindElements","find","find"]
    [[[-1,null,-1]],[1],[2]]
    Output
    [null,false,true]
    Explanation
    FindElements findElements = new FindElements([-1,null,-1]); 
    findElements.find(1); // return False 
    findElements.find(2); // return True 
    

    Example 2:

    Input
    ["FindElements","find","find","find"]
    [[[-1,-1,-1,-1,-1]],[1],[3],[5]]
    Output
    [null,true,true,false]
    Explanation
    FindElements findElements = new FindElements([-1,-1,-1,-1,-1]);
    findElements.find(1); // return True
    findElements.find(3); // return True
    findElements.find(5); // return False
    

    Example 3:

    Input
    ["FindElements","find","find","find","find"]
    [[[-1,null,-1,-1,null,-1]],[2],[3],[4],[5]]
    Output
    [null,true,false,false,true]
    Explanation
    FindElements findElements = new FindElements([-1,null,-1,-1,null,-1]);
    findElements.find(2); // return True
    findElements.find(3); // return False
    findElements.find(4); // return False
    findElements.find(5); // return True
    

      Constraints:

    Solution (Java)

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
    class FindElements {
        private final HashMap<Integer, Integer> map = new HashMap<>();
    
        public FindElements(TreeNode root) {
            helper(root, 0);
        }
    
        private void helper(TreeNode root, int x) {
            if (root == null) {
                return;
            }
            root.val = x;
            map.put(x, 0);
            helper(root.left, 2 * x + 1);
            helper(root.right, 2 * x + 2);
        }
    
        public boolean find(int target) {
            return map.containsKey(target);
        }
    }
    
    /**
     * Your FindElements object will be instantiated and called as such:
     * FindElements obj = new FindElements(root);
     * boolean param_1 = obj.find(target);
     */
    

    Explain:

    nope.

    Complexity: