LeetCode-祖父节点值为偶数的结点值之和
祖父节点值为偶数的结点值之和
LeetCode-1315
- 这题稍微难度有点大,但是仔细思考还是可以找到思路的。
- 因为只需要找到祖父节点这最上两层,所以可以带一个参数记录一下祖父节点是否是偶数,以及父节点是否是偶数。
- 求解的时候还需要注意本身结点是否是偶数,这个时候再改变参数的值。
/**
* 给你一棵二叉树,请你返回满足以下条件的所有节点的值之和:
* 该节点的祖父节点的值为偶数。(一个节点的祖父节点是指该节点的父节点的父节点。)
* 如果不存在祖父节点值为偶数的节点,那么返回 0 。
**/
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
// Definition for a binary tree node.
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
/**
6
/ \
7 8
/ \ / \
2 7 1 3
/ / \ \
9 1 4 5
**/
class Solution {
private:
int sum=0;//树的最大深度的结点值的和。
public:
void DFS(TreeNode* node,int par,int fa){
//cout<<par<<" "<<fa<<endl;
if((node->val)%2==0){
if(par==0){
sum+=node->val;
}
if(node->left)
DFS(node->left,fa-1,1);
if(node->right)
DFS(node->right,fa-1,1);
}else{
if(par==0){
sum+=node->val;
}
if(node->left)
DFS(node->left,fa-1,-1);
if(node->right)
DFS(node->right,fa-1,-1);
}
}
int sumEvenGrandparent(TreeNode* root) {
if(root){
DFS(root,-1,-1);
}
return sum;
}
};
int main(){
TreeNode* t1=new TreeNode(6);
TreeNode* t2=new TreeNode(7);
TreeNode* t3=new TreeNode(8);
TreeNode* t4=new TreeNode(2);
TreeNode* t5=new TreeNode(7);
TreeNode* t6=new TreeNode(1);
TreeNode* t7=new TreeNode(3);
TreeNode* t8=new TreeNode(9);
TreeNode* t9=new TreeNode(1);
TreeNode* t10=new TreeNode(4);
TreeNode* t11=new TreeNode(5);
t4->left=t8;
t5->left=t9;t5->right=t10;
t7->left=t11;
t2->left=t4;t2->right=t5;
t3->left=t6;t3->right=t7;
t1->left=t2;t1->right=t3;
Solution solution;
cout<<solution.sumEvenGrandparent(t1)<<endl;
system("pause");
return 0;
}
Either Excellent or Rusty