news 2026/5/6 6:34:00

LC.450 | 删除二叉搜索树中的节点 | 树 | 暴力重构/转化思维

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LC.450 | 删除二叉搜索树中的节点 | 树 | 暴力重构/转化思维

输入:
二叉搜索树的根节点root和一个需要删除的值key

要求:
删除 BST 中的指定节点,并保证二叉搜索树性质不变。

输出:
删除后的新树根节点。


思路:

这道题的标准解法通常涉及复杂的指针操作(特别是处理双子节点的情况)。但在实际解题或笔试中,如果我们一时无法理清复杂的指针断连逻辑,可以转换思维,利用“数据结构的特性”来降维打击。
当然这题自然有正规写法,等回头思路清晰了再来写,今天先来个暴力写法开开胃。
本题解采用“暴力重构”策略:
既然在树上直接修补很难,不如利用 BST 的性质:

  1. 拆迁(遍历):二叉搜索树本质上就是一堆有序的数据。我们可以先遍历整棵树,把除了目标key以外的所有节点值都收集到一个数组中。
  2. 重建(构造):拿着这个干净的数组,直接调用“构建二叉搜索树”(参考 LC.1008)的逻辑,重新盖一棵新树。

虽然这种方法在空间和时间上不是最优(涉及大量内存分配),但它逻辑极其简单,不易出错,是一种非常实用的“工程化”解题思路——解决不了问题,就解决提出问题的人(节点),然后重新组队。


复杂度:

  • 时间复杂度:O(N)O(N)O(N)
    • 遍历收集节点需要O(N)O(N)O(N),重新构建树也需要O(N)O(N)O(N)。虽然常数项较大,但量级依然是线性的。
  • 空间复杂度:O(N)O(N)O(N)
    • 需要一个数组来存储所有节点的值,加上递归栈的空间。

#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;structTreeNode{intval;TreeNode*left;TreeNode*right;TreeNode():val(0),left(nullptr),right(nullptr){}TreeNode(intx):val(x),left(nullptr),right(nullptr){}TreeNode(intx,TreeNode*left,TreeNode*right):val(x),left(left),right(right){}};classSolution{public:TreeNode*deleteNode(TreeNode*root,intkey){vector<int>vals;preorder(root,vals,key);returnbuildTree(vals);}voidpreorder(TreeNode*root,vector<int>&vals,intkey){if(!root)return;if(root->val!=key){vals.push_back(root->val);}preorder(root->left,vals,key);preorder(root->right,vals,key);}// 照搬 LC.1008 的逻辑TreeNode*buildTree(vector<int>&pre){if(pre.size()==0)returnnullptr;TreeNode*root=newTreeNode(pre[0]);vector<int>leftPart,rightPart;for(inti=1;i<pre.size();i++){if(pre[i]<pre[0])leftPart.push_back(pre[i]);elserightPart.push_back(pre[i]);}root->left=buildTree(leftPart);root->right=buildTree(rightPart);returnroot;}};
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:18:51

【Qt开源项目】— ModbusScope-day 5

第5天&#xff1a;数据处理层深入攻略&#xff08;ExpressionParser与GraphDataHandler&#xff09; 目标&#xff1a;用5-6小时掌握表达式解析、寄存器替换、数学计算的核心流程&#xff0c;理解原始数据如何转化为最终曲线数值。上午&#xff08;3小时&#xff09;&#xff1…

作者头像 李华
网站建设 2026/5/2 18:21:11

小程序会员积分系统功能开发,抽奖,大富翁等,附分员积分系统源码

积分系统小程序搭建大概会分为5个步骤&#xff1a;1. 需求分析、2. 系统设计、3. 开发、4. 测试、5. 部署。就这几个步骤起码需要三个人&#xff1a;产品经理、技术人员、测试人员。 如果是只是要搭建自己企业的积分商城&#xff0c;根本没必要自己搭建&#xff0c;因为最后拆…

作者头像 李华
网站建设 2026/5/1 8:38:00

PyTorch动态图机制如何支撑Qwen3-VL-30B的训练灵活性?

PyTorch动态图如何赋能Qwen3-VL-30B的灵活训练&#xff1f; 在构建下一代AI Agent的征途中&#xff0c;视觉语言模型&#xff08;VLM&#xff09;正扮演着越来越核心的角色。以Qwen3-VL-30B为代表的超大规模多模态模型&#xff0c;凭借其300亿参数量和强大的跨模态理解能力&…

作者头像 李华
网站建设 2026/5/5 4:41:57

接口测试需求分析

测试接口的时候&#xff0c;可能很多人都会想&#xff0c;按着研发给的接口协议文档来测&#xff0c;不就好了吗&#xff1f; 其实&#xff0c;对于接口的测试&#xff0c;还需要有点深度的需求分析&#xff0c;然后再进行对应的测试。对于接口测试&#xff0c;这里有个不太详…

作者头像 李华
网站建设 2026/4/30 11:59:00

Dify智能体平台集成Qwen3-VL-8B实现图文对话机器人

Dify智能体平台集成Qwen3-VL-8B实现图文对话机器人 在电商客服、内容审核和智能助手等实际场景中&#xff0c;用户上传一张图片并提问“这是什么&#xff1f;”“有没有问题&#xff1f;”“怎么改进&#xff1f;”已经成为常态。然而&#xff0c;传统AI系统大多只能处理文本输…

作者头像 李华
网站建设 2026/5/1 11:12:14

ENSP下载官网之外的技术延伸:网络仿真中集成AI决策模型

ENSP之外的智能跃迁&#xff1a;用Qwen3-14B构建自主决策型网络仿真系统 在华为ENSP这类传统网络仿真工具早已被广泛用于教学与运维演练的今天&#xff0c;一个现实问题正日益凸显&#xff1a;即便拓扑搭建得再精准、设备模拟得再逼真&#xff0c;整个系统的“大脑”依然是人。…

作者头像 李华