class Solution {
public:
//后序遍历,先删叶子节点
TreeNode* process(TreeNode* root, unordered_set<int>& set, vector<TreeNode*>& res)
{ //为空直接返回
if (!root) return NULL;
root->left = process(root->left, set, res); //左边
root->right = process(root->right, set, res); //右边
//根
if (set.find(root->val) != set.end()) {//待删除的节点,先从叶子节点开始删
if (root->left){
res.push_back(root->left);
}
if (root->right){
res.push_back(root->right);
}
delete(root); //释放对应空间
return NULL; //告诉上一级要删除当前结点
}
return root;
}
vector<TreeNode*> delNodes(TreeNode* root, vector<int>& to_delete) {
vector<TreeNode*> res; //保存结果的vector容器
unordered_set<int> set(to_delete.begin(), to_delete.end()); //将数组的值转换到set容器中存储,方便查找
if(process(root, set, res)!=NULL) //如果处理完之后root不是空,说明root没有被删除,放入res
{
res.push_back(root);
}
return res;
}
};
leetcode 1110. 删点成林
最新推荐文章于 2023-05-31 19:35:22 发布