diff --git a/1110. Delete Nodes And Return Forest b/1110. Delete Nodes And Return Forest new file mode 100644 index 0000000..e927dea --- /dev/null +++ b/1110. Delete Nodes And Return Forest @@ -0,0 +1,41 @@ +/** + * 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 { + +private: + void unlinker(TreeNode* &root, unordered_map &del, vector &ans){ + if(!root) return; + + unlinker(root->left,del,ans); + unlinker(root->right,del,ans); + + if(del[root->val]){ + if(root->left) ans.push_back(root->left); + if(root->right) ans.push_back(root->right); + root = NULL; + } + } + +public: + vector delNodes(TreeNode* root, vector& to_delete) { + + unordered_map del; + for(int i : to_delete) del[i] = true; + + vector ans; + unlinker(root,del,ans); + if(root) ans.push_back(root); + + return ans; + } +};