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

沈阳市网站建设报价品牌营销案例

沈阳市网站建设报价,品牌营销案例,网站做充值和提现,网站怎样做301跳转一、题目内容 题目要求删除二叉搜索树(BST)中值为 key 的节点,并保证删除后二叉搜索树的性质不变。返回删除节点后的二叉搜索树的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如…

一、题目内容

题目要求删除二叉搜索树(BST)中值为 key 的节点,并保证删除后二叉搜索树的性质不变。返回删除节点后的二叉搜索树的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。

二、题目分析

(一)输入和输出

输入:二叉搜索树的根节点 root 和待删除的值 key。

输出:删除指定值节点后二叉搜索树的根节点。

(二)递归函数 deleteNode 的逻辑

基本情况:如果当前节点为空(root == NULL),说明没有找到需要删除的节点,直接返回 NULL。

如果当前节点的值等于 key(root->val == key),则需要根据当前节点的子节点情况来决定如何删除:

  1. 如果当前节点是叶子节点(root->left == NULL && root->right == NULL),直接删除当前节点并返回 NULL。

  2. 如果当前节点只有一个右子节点(root->left == NULL && root->right != NULL),删除当前节点并返回其右子节点。

  3. 如果当前节点只有一个左子节点(root->left != NULL && root->right == NULL),删除当前节点并返回其左子节点。

  4. 如果当前节点既有左子节点又有右子节点,找到当前节点右子树的最左节点(即右子树中的最小值节点),将其左子树连接到该最左节点的左子树上,然后删除当前节点并返回其右子节点。

递归逻辑:如果当前节点的值大于 key(root->val > key),则递归地在左子树中删除 key 对应的节点;如果当前节点的值小于 key(root->val < key),则递归地在右子树中删除 key 对应的节点。递归返回后,将返回的子树节点赋值给当前节点的左或右子节点。

三、解题要点

(一)二叉搜索树的定义

二叉搜索树是一种特殊的二叉树,其性质是:对于任意节点,其左子树上所有节点的值都小于该节点的值,其右子树上所有节点的值都大于该节点的值。这一性质是删除操作的基础,删除操作需要保持这一性质不变。

(二)删除操作的性质

删除操作需要保持二叉搜索树的性质不变。删除节点后,树的结构需要重新调整,以确保仍然满足二叉搜索树的性质。

(三)解题思路

1.基本情况

如果当前节点为空(root == NULL),说明没有找到需要删除的节点,直接返回 NULL。这是递归的终止条件。

2.递归逻辑

比较当前节点值与待删除值:

如果当前节点的值等于 key(root->val == key),根据当前节点的子节点情况来决定如何删除。

如果当前节点的值大于 key(root->val > key),则递归地在左子树中删除 key 对应的节点。

如果当前节点的值小于 key(root->val < key),则递归地在右子树中删除 key 对应的节点。

更新子树:递归返回后,将返回的子树节点赋值给当前节点的左或右子节点。这一步确保了递归返回后,当前节点的子树被正确更新。

3.递归返回

递归返回时,返回当前节点。这一步确保了递归调用的正确性,使得每次递归返回后,当前节点的状态被正确恢复,不会影响后续的递归调用。

四、代码解答

class Solution {
public:TreeNode* deleteNode(TreeNode* root, int key) {// 如果当前节点为空,直接返回 NULLif (root == NULL) return NULL;// 如果当前节点的值等于 key,根据子节点情况决定如何删除if (root->val == key) {// 如果当前节点是叶子节点,直接删除并返回 NULLif (root->left == NULL && root->right == NULL) {delete root;return NULL;}// 如果当前节点只有一个右子节点,删除当前节点并返回其右子节点else if (root->left == NULL && root->right != NULL) {TreeNode* temp = root->right;delete root;return temp;}// 如果当前节点只有一个左子节点,删除当前节点并返回其左子节点else if (root->left != NULL && root->right == NULL) {TreeNode* temp = root->left;delete root;return temp;}// 如果当前节点既有左子节点又有右子节点else {// 找到当前节点右子树的最左节点TreeNode* cur = root->right;while (cur->left != NULL) {cur = cur->left;}// 将当前节点的左子树连接到最左节点的左子树上cur->left = root->left;// 删除当前节点并返回其右子节点TreeNode* temp = root->right;delete root;return temp;}}// 如果当前节点的值大于 key,递归地在左子树中删除 key 对应的节点if (root->val > key) {root->left = deleteNode(root->left, key);}// 如果当前节点的值小于 key,递归地在右子树中删除 key 对应的节点else {root->right = deleteNode(root->right, key);}// 返回当前节点return root;}
};

五、详细注释

(一)递归函数 deleteNode

基本情况:如果当前节点为空,直接返回 NULL。

如果当前节点的值等于 key,根据当前节点的子节点情况来决定如何删除。

递归逻辑:如果当前节点的值大于 key,递归地在左子树中删除 key 对应的节点;如果当前节点的值小于 key,递归地在右子树中删除 key 对应的节点。递归返回后,将返回的子树节点赋值给当前节点的左或右子节点。

六、回溯和递归的详细解释

(一)递归

递归是一种函数调用自身的方法,用于解决复杂问题。在本题中,递归用于逐层检查每个节点,找到需要删除的节点,并根据情况调整树的结构。递归的核心思想是将问题分解为更小的子问题,通过解决子问题来解决原问题。

(二)终止条件

递归的终止条件是当前节点为空,此时直接返回 NULL。这是递归的出口,确保递归不会无限进行下去。

(三)回溯

在递归调用返回后,通过返回值恢复到当前节点的状态,确保每次递归返回后,状态正确,不会影响后续的递归调用。

在本题中,回溯的过程主要体现在以下几个方面:

  1. 递归调用的返回值:每个递归分支都会返回一个节点,这个节点可以是删除操作后的子树的根节点,也可以是 NULL。

  2. 返回值的处理:在每个递归调用返回后,当前节点会根据返回值来决定下一步的操作:

    • 如果当前节点的值大于 key,将返回值赋值给当前节点的左子节点。

    • 如果当前节点的值小于 key,将返回值赋值给当前节点的右子节点。

(四)递归调用的详细过程

  1. 初始调用:从根节点开始调用 deleteNode(root, key)。

  2. 递归调用:如果 root->val > key,递归调用 deleteNode(root->left, key);如果 root->val < key,递归调用 deleteNode(root->right, key)。

  3. 终止条件:当递归调用到达一个空节点时,直接返回 NULL。

  4. 回溯过程:递归返回后,将返回的子树节点赋值给当前节点的左或右子节点。递归返回到上一层调用,继续处理上一层的节点,直到返回到根节点。

(五)代码执行过程示例

假设我们有一个二叉搜索树,根节点为 root,值为 5,其左子节点值为 3,右子节点值为 7。现在要删除值为 3 的节点。

  1. 初始调用:deleteNode(root, 3)。

  2. 当前节点值为 5,3 < 5,递归调用 deleteNode(root->left, 3)。

  3. 递归调用:deleteNode(root->left, 3)。

  4. 当前节点值为 3,3 == 3,进入删除逻辑:

    • 当前节点只有一个左子节点,删除当前节点并返回其左子节点。

  5. 回溯过程:

    • 返回到 root,将返回的左子节点

http://www.dtcms.com/wzjs/476850.html

相关文章:

  • wordpress 全局变量深圳专门做seo的公司
  • html5网站是用什么软件做的吗福建seo快速排名优化
  • 做彩票平台网站吗seo排名优化推广报价
  • 做软件下载网站怎么赚钱广东省最新新闻
  • 做app_需要先做网站吗百度推广公司哪家比较靠谱
  • wordpress模板替换武汉网站seo推广公司
  • 深圳网站建设-中国互联怎么优化一个网站
  • wordpress站点演示网站推广的目的是什么
  • 智能小程序开发报价seo模拟点击算法
  • 网站上怎么做企业推广百度网页版下载
  • 地方o2o同城网站源码百度贴吧网页版登录入口
  • 90后做受网站9个广州seo推广神技
  • 什么是网络营销?请写出其定义网站如何优化关键词排名
  • 网站后台图片不显示关键词点击价格查询
  • php网站开发做什么seo主要优化哪些
  • 山东饰品行业网站制作seo是什么单位
  • 介绍婚纱网站的ppt怎么做网页制作公司
  • 应式网站百度精简版入口
  • 网站文件保护怎么做sem是什么意思啊
  • 网站建设试用企业培训方案
  • 中国工程机械网官网北京seo怎么优化
  • 物流网站建设哪个好谷歌seo和百度seo区别
  • 网站建设资讯版块如何做用户运营黄页推广引流网站
  • 重庆沙坪坝地图如何进行关键词优化工作
  • 重庆无障碍网站建设百度网站快速排名公司
  • 星光影视园网站建设案例云资源软文发布平台
  • 99到家网站怎么做百度高级搜索技巧
  • 软件开发工资怎么样seo关键词排名优化销售
  • 用vs2010做网站并连数据库西安seo王尘宇
  • 西平县住房城乡建设局网站跨境电商