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)
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.
An example is the root-to-leaf path 1->2->3 which represents the number 123.
Find the total sum of all root-to-leaf numbers.
Note: A leaf is a node with no children.
Example:
Input: [1,2,3]
1
/ \
2 3
Output: 25
Explanation:
The root-to-leaf path 1->2 represents the number 12.
The root-to-leaf path 1->3 represents the number 13.
Therefore, sum = 12 + 13 = 25.
Example 2:
Input: [4,9,0,5,1]
4
/ \
9 0
/ \
5 1
Output: 1026
Explanation:
The root-to-leaf path 4->9->5 represents the number 495.
The root-to-leaf path 4->9->1 represents the number 491.
The root-to-leaf path 4->0 represents the number 40.
Therefore, sum = 495 + 491 + 40 = 1026.
Solution: Recursion
Time complexity: O(n) Space complexity: O(h)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Author: Huahua
classSolution{
public:
intsumNumbers(TreeNode*root){
intans=0;
function<void(TreeNode*,int)>traverse=[&](TreeNode* t, int num) {