-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy path1261-find-elements-in-a-contaminated-binary-tree.js
57 lines (53 loc) · 1.56 KB
/
1261-find-elements-in-a-contaminated-binary-tree.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
* 1261. Find Elements in a Contaminated Binary Tree
* https://leetcode.com/problems/find-elements-in-a-contaminated-binary-tree/
* Difficulty: Medium
*
* Given a binary tree with the following rules:
* 1. root.val == 0
* 2. For any treeNode:
* 1. If treeNode.val has a value x and treeNode.left != null,
* then treeNode.left.val == 2 * x + 1
* 2. If treeNode.val has a value x and treeNode.right != null,
* then treeNode.right.val == 2 * x + 2
*
* Now the binary tree is contaminated, which means all treeNode.val have
* been changed to -1.
*
* Implement the FindElements class:
* - FindElements(TreeNode* root) Initializes the object with a contaminated binary
* tree and recovers it.
* - bool find(int target) Returns true if the target value exists in the recovered
* binary tree.
*/
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
*/
var FindElements = function(root) {
this.values = new Set();
root.val = 0;
const traverse = node => {
if (!node) return;
this.values.add(node.val);
if (node.left) node.left.val = 2 * node.val + 1;
if (node.right) node.right.val = 2 * node.val + 2;
traverse(node.left);
traverse(node.right);
};
traverse(root);
};
/**
* @param {number} target
* @return {boolean}
*/
FindElements.prototype.find = function(target) {
return this.values.has(target);
};