Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stack>
- #include <queue>
- #include "init_tree.hpp"
- using namespace std;
- struct familyMember {
- TreeNode* currentNode;
- queue<int> ancestors;
- };
- class Solution {
- public:
- int sumEvenGrandparent(TreeNode* root) {
- int sum = 0;
- stack<familyMember> mstack;
- if (root == nullptr)
- return 0;
- else {
- familyMember froot;
- froot.currentNode = root;
- mstack.push(froot);
- }
- while(!mstack.empty()) {
- familyMember current = mstack.top();
- mstack.pop();
- if (current.ancestors.size() == 2) {
- if (current.ancestors.front() % 2 == 0) {
- sum += current.currentNode->val;
- // cout << "child = " << current.currentNode->val << endl;
- }
- current.ancestors.pop();
- }
- // insert self as parent for leafs
- queue<int> newAncestors;
- if (!current.ancestors.empty())
- newAncestors.push(current.ancestors.front());
- newAncestors.push(current.currentNode->val);
- if (current.currentNode->left != nullptr) {
- familyMember fleft;
- fleft.ancestors = newAncestors;
- fleft.currentNode = current.currentNode->left;
- mstack.push(fleft);
- }
- if (current.currentNode->right != nullptr) {
- familyMember fright;
- fright.ancestors = newAncestors;
- fright.currentNode = current.currentNode->right;
- mstack.push(fright);
- }
- }
- return sum;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement