题目:
把要删掉的节点删掉
然后就会变成很多颗树
你要把每颗树的最上面的节点放进阵列
思路:
先跑去每棵树看是不是要删掉的数字
是的话就把他删了
不然就继续跑
如果要删除的话
就会让下面左右两个节点都变成新的树
所以要标记一下他们
让他们塞进去阵列
这样就好ㄌ
然后我一开始是用void写
害我没删干净
机掰
```cpp
/**
* 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), ri
ght(right) {}
* };
*/
class Solution {
public:
unordered_set<int> del;
vector<TreeNode*> res;
TreeNode* find(TreeNode* root, int isnew)
{
if(root==NULL)return NULL;
if(del.find(root->val) != del.end())
{
find(root->left,1);
find(root->right,1);
delete root;
return NULL;
}
root->left = find(root->left,0);
root->right = find(root->right,0);
if(isnew && root!=NULL)
{
res.push_back(root);
}
return root;
}
vector<TreeNode*> delNodes(TreeNode* root, vector<int>& to_delete)
{
del.clear();
res.clear();
for(int k : to_delete)del.insert(k);
find(root,1);
return res;
}
};
```