Given a binary tree root and an integer target, delete all the leaf nodes with value target.
Note that once you delete a leaf node with value target, if it’s parent node becomes a leaf node and has the value target, it should also be deleted (you need to continue doing that until you can’t).
Example 1:
Input: root = [1,2,3,2,null,2,4], target = 2
Output: [1,null,3,null,4]
Explanation: Leaf nodes in green with value (target = 2) are removed (Picture in left).
After removing, new nodes become leaf nodes with value (target = 2) (Picture in center).
Given a binary tree, return the sum of values of nodes with even-valued grandparent. (A grandparent of a node is the parent of its parent, if it exists.)
If there are no nodes with an even-valued grandparent, return 0.
Example 1:
Input: root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]
Output: 18
Explanation: The red nodes are the nodes with even-value grandparent while the blue nodes are the even-value grandparents.
Constraints:
The number of nodes in the tree is between 1 and 10^4.
The height of the binary tree is less than or equal to 20
The total number of nodes is between [1, 10^4]
Total calls of find() is between [1, 10^4]
0 <= target <= 10^6
Solutoin 1: Recursion and HashSet
Time complexity: Recover O(n), find O(1) Space complexity: O(n)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Author: Huahua
classFindElements{
public:
FindElements(TreeNode*root){
recover(root,0);
}
boolfind(inttarget){
returns_.count(target);
}
private:
unordered_set<int>s_;
voidrecover(TreeNode*root,intval){
if(!root)return;
root->val=val;
s_.insert(val);
recover(root->left,val*2+1);
recover(root->right,val*2+2);
}
};
Solution 2: Recursion and Binary format
The binary format of t = (target + 1) (from high bit to low bit, e.g. in reverse order) decides where to go at each node. t % 2 == 1, go right, otherwise go left t = t / 2 or t >>= 1
1
2
3
4
5
6
7
8
9
10
11
12
e.g.target=13,t=13+1=14
t=14,t%1=0,t/2=7,left
t=7,t%1=1,t/2=3,right
t=3,t%1=1,t/2=1,right
13=>right,right,left
0
\
2
\
6
/
13
Time complexity: Recover O(n), find O(log|target|) Space complexity: O(1)