Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
- * };
- */
- class Solution {
- vector<TreeNode*> ans;
- unordered_map<int, bool> m;
- public:
- vector<TreeNode*> delNodes(TreeNode* root, vector<int>& to_delete) {
- for(int val: to_delete)
- m[val] = true;
- if(!m.count(root->val)) ans.push_back(root);
- dfs(root, NULL);
- return ans;
- }
- void dfs(TreeNode* curr, TreeNode* parent){
- if(!curr) return;
- dfs(curr->left, curr);
- dfs(curr->right, curr);
- // Delete the current node and add its left/right child to answer list.
- if(m.count(curr->val)){
- if(curr->left) ans.push_back(curr->left);
- if(curr->right) ans.push_back(curr->right);
- if(parent && parent->left == curr) parent->left = NULL;
- if(parent && parent->right == curr) parent->right = NULL;
- delete curr;
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement