Return the roots of the trees in the remaining forest. You may return the result in any order.
Input: root = [1,2,3,4,5,6,7], to_delete = [3,5]
Output: [[1,2,null,4],[6],[7]]
Input: root = [1,2,4,null,3], to_delete = [3]
Output: [[1,2,4]]
Solution: (Using Postorder)
class Solution
{
public:
vector<TreeNode *> res;
void del(TreeNode *&root, unordered_set<int> &s)
{
if (root == NULL)
{
return;
}
del(root->left, s);
del(root->right, s);
if (s.find(root->val) != s.end())
{
if (root->left)
{
res.push_back(root->left);
}
if (root->right)
{
res.push_back(root->right);
}
s.erase(s.find(root->val));
root = NULL;
delete (root);
}
return;
}
vector<TreeNode *> delNodes(TreeNode *root, vector<int> &to_delete)
{
unordered_set<int> s;
for (int i = 0; i < to_delete.size(); i++)
{
s.insert(to_delete[i]);
}
del(root, s);
if (root)
{
res.push_back(root);
}
return res;
}
};