当前位置: 首页 > ops >正文

Day118 | 灵神 | 二叉树 | 删点成林

Day118 | 灵神 | 二叉树 | 删点成林

1110.删点成林

1110. 删点成林 - 力扣(LeetCode)

思路:

最直接的思路就是看当前结点的值是不是在要删除的列表中,在的话删除当前结点并把左右孩子加入res中

很可惜这样是错的,因为这样做只是删除了当前结点,没有改变当前结点父节点的指针,导致父节点的里面还放着我们已经delete以后的地址空间,这样做漏洞很大

class Solution {
public:vector<TreeNode*> res;unordered_set<int> s;void dfs(TreeNode *t){if(t==nullptr)return ;if (s.find(t->val)!=s.end()){res.push_back(t->left);res.push_back(t->right);}dfs(t->left);dfs(t->right);if (s.find(t->val)!=s.end())delete t;}vector<TreeNode*> delNodes(TreeNode* root, vector<int>& to_delete) {for (int x : to_delete) s.insert(x); dfs(root);if (s.find(root->val)!=s.end())return res;res.push_back(root);return res;}
};

正确的做法是后序遍历,返回值是当前结点删了没删

如果当前结点该删除,那就给上层节点返回nullptr,告知父节点该节点被删了

​ 同时还要把不为空的左右孩子加入到森林中

如果当前结点没有被删除,那就给上层结点返回当前结点,表示当前结点没有被删除

完整代码:

class Solution {
public:vector<TreeNode*> res;unordered_set<int> s;TreeNode* dfs(TreeNode* node) {if (!node) return nullptr;// 先递归处理子树node->left = dfs(node->left);node->right = dfs(node->right);// 判断当前节点是否需要删除if (s.count(node->val)) {if (node->left) res.push_back(node->left);if (node->right) res.push_back(node->right);return nullptr; // 告知父节点指针置空}return node;}vector<TreeNode*> delNodes(TreeNode* root, vector<int>& to_delete) {for (int x : to_delete) s.insert(x);root = dfs(root);if (root) res.push_back(root); // 处理根节点return res;}
};
http://www.xdnf.cn/news/6257.html

相关文章:

  • 缺乏对新技术的评估和引入机制,如何建立
  • 【C++】set和multiset的常用接口详解
  • 答题pk小程序道具卡的获取与应用
  • yarn任务筛选spark任务,判断内存/CPU使用超过限制任务
  • 【物联网】基于树莓派的物联网开发【3】——最新镜像下载和烧录
  • 【iOS】源码阅读(四)——isa与类关联的原理
  • 怎么样制作网站?
  • redis是内存级缓存吗
  • the request was rejected because no multipart boundary was found
  • Python-Django系列—日志
  • 中间件-MQ常见问题
  • TCP实现安全传输的核心机制 + TCP的报文讲解(全程图文讲解)
  • UEFI Spec 学习笔记---33 - Human Interface Infrastructure Overview(1)
  • 量化交易 - 网格交易策略实现与原理解析
  • 随机森林(Random Forest)
  • EasyExcel详解
  • 用户态和内核态
  • 2、ubantu系统配置OpenSSH | 使用vscode或pycharm远程连接
  • 用MCP往ppt文件里插入系统架构图
  • Servlet原理
  • 获取淘宝商品图片的完整指南
  • 3D曲面上的TSP问题(一):曲面上点集距离求解
  • EdgeShard:通过协作边缘计算实现高效的 LLM 推理
  • 华为Watch的ECG功能技术分析
  • SQLMesh 模型管理指南:从创建到验证的全流程解析
  • 部署安装jenkins.war(2.508)
  • Golang
  • CSS 溢出内容处理、可见性控制与盒类型设置深度解析
  • 多链互操作性标准解析:构建下一代区块链互联生态
  • 从AlphaGo到ChatGPT:AI技术如何一步步改变世界?