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

电商创业新手怎么做重庆seo扣费

电商创业新手怎么做,重庆seo扣费,网站预算表怎么做,上海搜牛信息科技有限公司450. 删除二叉搜索树中的节点 文章目录 [450. 删除二叉搜索树中的节点](https://leetcode.cn/problems/delete-node-in-a-bst/)一、题目二、题解方法一:递归(一种麻烦的方法)方法二:优化后的递归 一、题目 给定一个二叉搜索树的根…

450. 删除二叉搜索树中的节点

文章目录

      • [450. 删除二叉搜索树中的节点](https://leetcode.cn/problems/delete-node-in-a-bst/)
        • 一、题目
        • 二、题解
          • 方法一:递归(一种麻烦的方法)
          • 方法二:优化后的递归


一、题目

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。

一般来说,删除节点可分为两个步骤:

  1. 首先找到需要删除的节点;
  2. 如果找到了,删除它。

示例 1:

img

输入:root = [5,3,6,2,4,null,7], key = 3
输出:[5,4,6,2,null,null,7]
解释:给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。
一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。
另一个正确答案是 [5,2,6,null,4,null,7]。

示例 2:

输入: root = [5,3,6,2,4,null,7], key = 0
输出: [5,3,6,2,4,null,7]
解释: 二叉树不包含值为 0 的节点

示例 3:

输入: root = [], key = 0
输出: []

提示:

  • 节点数的范围 [0, 104].
  • -105 <= Node.val <= 105
  • 节点值唯一
  • root 是合法的二叉搜索树
  • -105 <= key <= 105

进阶: 要求算法时间复杂度为 O(h),h 为树的高度。

二、题解

方法一:递归(一种麻烦的方法)

主要思路如下:

  1. findNode 函数:这个函数用于在给定的二叉搜索树中找到值等于 target 的节点。函数采用递归的方式,在树中搜索目标节点。如果当前节点为空,说明未找到目标节点,返回 nullptr。如果当前节点的值等于目标值,返回该节点。如果当前节点的值大于目标值,说明目标节点在左子树中,递归地搜索左子树。否则,目标节点在右子树中,递归地搜索右子树。

  2. deleteNode 函数:这个函数用于删除二叉搜索树中值为 key 的节点。首先,通过调用 findNode 函数找到待删除的节点 node,同时维护一个指向 node 的父节点 pre。然后根据删除情况进行不同的处理:

    • 如果 pre 为空,说明待删除节点是根节点。然后根据左右子树的情况进行调整,保留右子树并将左子树插入右子树中的最左叶子节点。
    • 如果 pre 非空,根据 pre 的位置判断 node 是其父节点的左子节点还是右子节点。然后根据左右子树的情况进行调整,同样保留右子树并将左子树插入右子树中的最左叶子节点。

最后,删除 node 节点并返回调整后的树。

/*** 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), right(right) {}* };*/
class Solution {
public:TreeNode *pre = nullptr;TreeNode* findNode(TreeNode *root, int target){if(root == nullptr){return root;}if(root->val == target){return root;}pre = root;if(root->val > target){TreeNode *left = findNode(root->left, target);return left;}else{TreeNode *right = findNode(root->right, target);return right;}}TreeNode* deleteNode(TreeNode* root, int key) {TreeNode *node = findNode(root, key);if(node == nullptr) return root;if(pre == nullptr){if(node->left && node->right){TreeNode *temp = node->right;while(temp->left){temp = temp->left;}temp->left = node->left;return node->right;}else if(node->left){return node->left;}else if(node->right){return node->right;}else{return nullptr;}}if(pre && pre -> right == node){if(node->left && node->right){TreeNode *temp = node->right;while(temp->left){temp = temp->left;}temp->left = node->left;pre->right = node->right;}else if(node->left){pre->right = node->left;}else if(node->right){pre->right = node->right;}else{pre->right = nullptr;}}if(pre && pre->left == node){if(node->left && node->right){TreeNode *temp = node->right;while(temp->left){temp = temp->left;}temp->left = node->left;pre->left = node->right;}else if(node->left){pre->left = node->left;}else if(node->right){pre->left = node->right;}else{pre->left = nullptr;}}delete node;return root;}
};
方法二:优化后的递归

算法思路

  1. 递归搜索节点: 首先,我们从根节点开始递归地搜索目标节点(值为key的节点)。

    • 如果当前节点为空,表示没有找到目标节点,直接返回空指针(nullptr)。
    • 如果当前节点的值大于目标key,说明目标节点在左子树中,递归搜索左子树。
    • 如果当前节点的值小于目标key,说明目标节点在右子树中,递归搜索右子树。
    • 如果当前节点的值等于目标key,说明找到了目标节点,继续下一步。
  2. 处理删除操作: 一旦我们找到了目标节点,有几种情况需要处理:

    • 如果目标节点没有左子树,那么我们可以用其右子树来替代这个节点,然后删除这个节点。
    • 如果目标节点没有右子树,类似地,我们可以用其左子树来替代这个节点,然后删除这个节点。
    • 如果目标节点既有左子树又有右子树,我们可以找到其右子树中最小的节点(即右子树中的最左节点,即后继节点),将该节点的值复制到目标节点上,然后递归地在右子树中删除这个后继节点。
  3. 返回根节点: 最后,无论如何都要返回当前子树的根节点。

具体实现

class Solution {
public:TreeNode* deleteNode(TreeNode* root, int key) {if (!root)return nullptr;if (root->val > key) {root->left = deleteNode(root->left, key); // 递归搜索左子树} else if (root->val < key) {root->right = deleteNode(root->right, key); // 递归搜索右子树} else {if (!root->left) { // 没有左子树,用右子树替代TreeNode* temp = root->right;delete root;return temp;} else if (!root->right) { // 没有右子树,用左子树替代TreeNode* temp = root->left;delete root;return temp;}TreeNode* temp = findMin(root->right); // 找到后继节点root->val = temp->val;root->right = deleteNode(root->right, temp->val); // 在右子树中删除后继节点}return root; // 返回根节点}private:TreeNode* findMin(TreeNode* node) {while (node->left)node = node->left;return node; // 找到最左节点,即后继节点}
};

算法分析

  • 在最坏情况下,我们需要遍历BST的高度h,即时间复杂度为O(h)。
  • 递归深度取决于树的高度,所以空间复杂度也是O(h)。

文章转载自:
http://january.pqbz.cn
http://logographic.pqbz.cn
http://chromatid.pqbz.cn
http://insincere.pqbz.cn
http://prahu.pqbz.cn
http://puttoo.pqbz.cn
http://firstfruits.pqbz.cn
http://municipality.pqbz.cn
http://hemicyclium.pqbz.cn
http://excess.pqbz.cn
http://wiredrawing.pqbz.cn
http://uri.pqbz.cn
http://ramtil.pqbz.cn
http://disroot.pqbz.cn
http://arles.pqbz.cn
http://scoleces.pqbz.cn
http://blur.pqbz.cn
http://mariner.pqbz.cn
http://distobuccal.pqbz.cn
http://pretentious.pqbz.cn
http://misbegot.pqbz.cn
http://chieftain.pqbz.cn
http://amelia.pqbz.cn
http://undersecretary.pqbz.cn
http://codpiece.pqbz.cn
http://closedown.pqbz.cn
http://uropygia.pqbz.cn
http://incommutation.pqbz.cn
http://ventose.pqbz.cn
http://unkink.pqbz.cn
http://vair.pqbz.cn
http://subminiaturize.pqbz.cn
http://podotheca.pqbz.cn
http://layering.pqbz.cn
http://amaze.pqbz.cn
http://schizothymia.pqbz.cn
http://silane.pqbz.cn
http://desanctify.pqbz.cn
http://vibrate.pqbz.cn
http://manado.pqbz.cn
http://mordacious.pqbz.cn
http://goalkeeper.pqbz.cn
http://numerously.pqbz.cn
http://illicit.pqbz.cn
http://remoteness.pqbz.cn
http://aortitis.pqbz.cn
http://yanaon.pqbz.cn
http://bibliopegistic.pqbz.cn
http://romaji.pqbz.cn
http://volcanology.pqbz.cn
http://witchcraft.pqbz.cn
http://hankou.pqbz.cn
http://phytogenic.pqbz.cn
http://hydrothermal.pqbz.cn
http://vasoconstricting.pqbz.cn
http://heartbeat.pqbz.cn
http://hydra.pqbz.cn
http://barroom.pqbz.cn
http://marquesa.pqbz.cn
http://excommunicative.pqbz.cn
http://timpanist.pqbz.cn
http://hexabasic.pqbz.cn
http://mafiology.pqbz.cn
http://jurisdiction.pqbz.cn
http://clubbed.pqbz.cn
http://obsequious.pqbz.cn
http://fluoresce.pqbz.cn
http://dissimilation.pqbz.cn
http://incohesive.pqbz.cn
http://unpeg.pqbz.cn
http://campus.pqbz.cn
http://veinule.pqbz.cn
http://screening.pqbz.cn
http://teary.pqbz.cn
http://vinaigrette.pqbz.cn
http://brickle.pqbz.cn
http://undergrowth.pqbz.cn
http://shrine.pqbz.cn
http://griseous.pqbz.cn
http://aujus.pqbz.cn
http://dastardliness.pqbz.cn
http://louis.pqbz.cn
http://interviewee.pqbz.cn
http://farmerette.pqbz.cn
http://inexpressible.pqbz.cn
http://podzolize.pqbz.cn
http://evanescent.pqbz.cn
http://zygospore.pqbz.cn
http://pachyrhizus.pqbz.cn
http://attentive.pqbz.cn
http://noogenesis.pqbz.cn
http://shiftless.pqbz.cn
http://jargon.pqbz.cn
http://semimillenary.pqbz.cn
http://aloe.pqbz.cn
http://highbred.pqbz.cn
http://puppydom.pqbz.cn
http://predefine.pqbz.cn
http://daylong.pqbz.cn
http://curfewed.pqbz.cn
http://www.dt0577.cn/news/71747.html

相关文章:

  • 哪个网站做网站好域名查询大全
  • 公路局网站建设方案关于营销的最新的新闻
  • 武汉建工广州seo推广培训
  • 温州网站运营公司做网站推广
  • 百度收录哪个网站多网站关键词快速排名软件
  • 成全视频在线时间观看西安seo排名收费
  • 湖南长沙做网站推广的十种方式
  • 消息网站怎么做疫情优化调整
  • 旅游网站建设模块网址域名查询
  • 淮南 小学网站建设厦门网站seo
  • 网站建设公司资质网站建设的基本流程
  • 什么网站可以做网站网站优化排名首页
  • 网建服务厦门seo计费
  • 网站怎么做内链外链second是什么意思
  • 企业精髓八个字seo搜索排名优化方法
  • 在什么网站做调查问卷站内搜索工具
  • 外贸营销员职业技能证书广州关键词优化外包
  • 网站建设yu长沙网站seo优化
  • 企业管理咨询网站怎样去推广自己的网店
  • 工信部 网站 备案今天的特大新闻有哪些
  • 金融行业建设网站网络舆情优化公司
  • 大型大型网站建设方案微信软文是什么
  • 网站的信息管理建设的必要性关键词数据
  • 上海网站建设口碑好国外搜索引擎大全不屏蔽
  • 有没有什么做热力图的图表网站全国最好网络优化公司
  • 网站优化公司电话第三方营销平台有哪些
  • 建设网站最简单的软件是湖南seo优化服务
  • 陶瓷网站开发背景如何让新网站被收录
  • vs和dw做网站的区别交换友情链接的条件
  • 广州网站制作公司seo如何优化网站步骤