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;
}

猜你喜欢

转载自www.cnblogs.com/GarrettWale/p/12347388.html
今日推荐