首页 > 编程语言 >代码随想录算法训练营第二十天| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

代码随想录算法训练营第二十天| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

时间:2024-08-27 10:52:40浏览次数:13  
标签:right TreeNode root 二叉 搜索 return NULL 树中 left

235. 二叉搜索树的最近公共祖先

不想动脑子,沿用了 普通二叉树的 最近公共祖先,和昨天那题一样

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(root==NULL||root==p||root==q) return root;
        TreeNode* left= lowestCommonAncestor(root->left,p,q);
        TreeNode* right= lowestCommonAncestor(root->right,p,q);
        if(left!=NULL && right!=NULL) return root;
        if(left==NULL && right!=NULL) return right;
        else if(left!=NULL && right==NULL) return left;
        else{
            return NULL;
        }
        
    }
};

701.二叉搜索树中的插入操作

1. 有返回值和无返回值的递归很不一样。没有仔细区分。这题的关键是有返回值,所以递归的时候让左子树等于 函数的返回值。

class Solution {
public:
    TreeNode* insertIntoBST(TreeNode* root, int val) {
        if(root==NULL) 
        {
            TreeNode* newnode=new TreeNode(val);
            return newnode;//这个地方是返回值。不用root->left=newnode 细细品味
        }
        if(val>root->val)
        {
            root->right=insertIntoBST(root->right,val);
        }
        if(val<root->val)
        {
            root->left=insertIntoBST(root->left,val);
        }
        return root;
    }
};

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

1.需要考虑的情况很多,这种复杂的情况试着自己想一下,想完整。

2. 注意左右子树都是一大串,不止一个单结点。情况四就是这样。左子树串在 右子树的最左边。(左子树串都比root小,root比右子树串小,右子树的左下角最小)

3. 第一次使用auto,自动匹配类型,有点像golang里面的:=

class Solution {
public:
    TreeNode* deleteNode(TreeNode* root, int key) {
        //逻辑好复杂
        if(root==nullptr) return root; //没找到删除的点
        if(root->val==key)
        {
            //情况一:左右子树都为空
            if(root->right==NULL&& root->left==NULL)
            {
                delete root;
                return nullptr;
            } 
            //情况二:右子树为空 
            if(root->right==NULL && root->left!=NULL)
            {
                auto oldnode=root->left;//auto自动匹配类型
                delete root;
                return oldnode;
            }
            //情况三:左子树为空
            if(root->right!=NULL && root->left==NULL)
            {
                TreeNode* oldnode=root->right;
                delete root;
                return oldnode;
            }
            //情况四:左右子树都不为空
            if(root->right!=NULL && root->left!=NULL)
            {
                //把左子树 移到 右子树的最左边
                TreeNode* cur=root->right;
                while(cur->left!=nullptr)
                {
                    cur=cur->left;
                }
                cur->left=root->left;
                TreeNode* temp=root;
                root=root->right;
                delete temp;
                return root;
            }
        }
        if(key>root->val)
        {
            root->right=deleteNode(root->right,key);
        }
        if(key<root->val)
        {
            root->left=deleteNode(root->left,key);
        }
        return root;

    }
};

标签:right,TreeNode,root,二叉,搜索,return,NULL,树中,left
From: https://blog.csdn.net/qq_42818497/article/details/141597125

相关文章

  • 【第82课】开发组件安全&Solr搜索&Shiro身份&Log4j日志&本地CVE环境复现
    免责声明本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。文中所涉......
  • 折腾 Quickwit,Rust 编写的分布式搜索引擎-官方配置详解
    Nodeconfiguration(节点配置)节点配置允许您为集群中的各个节点自定义和优化设置。它被分为几个部分:常规配置设置:共享的顶级属性Storage(存储)设置:在storage部分定义https://quickwit.io/docs/configuration/node-config#storage-configurationMetastore(元存储)设置:在......
  • 手搓平衡搜索树-红黑树 平衡修正 图文详解 (万字长文)
    目录红黑树简述性质/规则主要规则:推导性质:红黑树的基本实现structRBTreeNodeclassRBTree红黑树的插入红黑树插入修正前言什么时候需要变色:变色的基础:为什么需要旋转与变色变色:旋转需要修正的所有情况先认识最简单的情况1.叔叔是红色结点注意:2.没有叔叔结点3.叔叔是黑色......
  • 【数据结构】二叉树的顺序结构,详细介绍堆以及堆的实现,堆排序
    目录1.二叉树的顺序结构2.堆的概念及结构3.堆的实现3.1堆的结构3.2堆的初始化3.3堆的插入 3.4堆的删除3.5获取堆顶数据3.6堆的判空3.7堆的数据个数3.8堆的销毁4.堆的应用4.1堆排序4.1.1向下调整建堆的时间复杂度 4.1.2向上调整建堆的时间复杂......
  • 商城项目搜索展示页功能细化完善和改进-----商城项目
    <!DOCTYPEhtml><htmllang="en"xmlns:th="http://www.thymeleaf.org"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,user-scalable=n......
  • 商城项目搜索展示页基于后端构造用户搜索的面包屑信息-----商城项目
    packagecom.alatus.search.vo;importlombok.Data;@DatapublicclassAttrResponseVo{//分类名字privateStringcatelogName;//分组的名字privateStringgroupName;//菜单路径privateLong[]catelogPath;/***......
  • 搜索二维矩阵 II(LeetCode)
    题目编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。解题"""时间复杂度为O(m+n),其中m是矩阵的行数,n是矩阵的列数。"""defsearchMatrix(matrix,t......
  • 【Java】/* 二叉树 - 底层实现*/
    一、前序遍历-递归/*1.前序遍历-递归*/publicvoidpreOrder(TreeNoderoot){//1.如果根节点为nullif(root==null){return;}//本意:打印树的根,左,右节点//2.打印根节点的值System.out......
  • 【数据结构篇】~链式二叉树(附源码)
    链式二叉树前言(含头文件)头文件1.链式二叉树的组成2.前、中、后、层序遍历1.前序遍历2.中序遍历3.后序遍历3.结点个数以及高度等​4.判断二叉树是否为完全二叉树前言(含头文件)之前的堆是特殊的二叉树是顺序结构的二叉树,而链式二叉树使用队列实现的。二叉树的实现大......
  • Typecho Joe 导航菜单目录以及搜索关键字回显主题优化版
    Joe是Typecho博客中一款开源免费且非常精美的主题,但是这款主题很早就停止维护了,有些功能作者并没有开发,并且在Typecho更新到1.2.1版本后还出现了一个小BUGJoe主题的知名度很高,所以在原作者停止维护后很多大佬发布过自己魔改的版本,不可否认魔改后的主题BUG基本解决,而且......