Advertisement
Marvin48

1315. Sum of Nodes with Even-Valued Grandparent

Jul 2nd, 2021 (edited)
2,909
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <stack>
  3. #include <queue>
  4. #include "init_tree.hpp"
  5.  
  6. using namespace std;
  7.  
  8. struct familyMember {
  9.     TreeNode* currentNode;
  10.     queue<int> ancestors;
  11. };
  12.  
  13. class Solution {
  14. public:
  15.     int sumEvenGrandparent(TreeNode* root) {
  16.         int sum = 0;
  17.         stack<familyMember> mstack;
  18.        
  19.         if (root == nullptr)
  20.             return 0;
  21.         else {
  22.             familyMember froot;
  23.             froot.currentNode = root;
  24.             mstack.push(froot);
  25.         }
  26.            
  27.         while(!mstack.empty()) {
  28.             familyMember current = mstack.top();
  29.             mstack.pop();
  30.            
  31.             if (current.ancestors.size() == 2) {
  32.                 if (current.ancestors.front() % 2 == 0) {
  33.                     sum += current.currentNode->val;
  34.                     // cout << "child = " << current.currentNode->val << endl;
  35.                 }
  36.                 current.ancestors.pop();
  37.             }
  38.            
  39.             // insert self as parent for leafs
  40.             queue<int> newAncestors;
  41.             if (!current.ancestors.empty())
  42.                 newAncestors.push(current.ancestors.front());
  43.             newAncestors.push(current.currentNode->val);
  44.            
  45.             if (current.currentNode->left != nullptr) {
  46.                 familyMember fleft;
  47.                 fleft.ancestors = newAncestors;
  48.                 fleft.currentNode = current.currentNode->left;
  49.                 mstack.push(fleft);
  50.             }
  51.             if (current.currentNode->right != nullptr) {
  52.                 familyMember fright;
  53.                 fright.ancestors = newAncestors;
  54.                 fright.currentNode = current.currentNode->right;
  55.                 mstack.push(fright);
  56.             }
  57.         }
  58.        
  59.         return sum;
  60.     }
  61. };
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement