首页 > 编程语言 >Delete a node from bst【2月15日学习笔记】

Delete a node from bst【2月15日学习笔记】

时间:2024-02-15 16:12:15浏览次数:22  
标签:node right 15 temp bst data NULL root

点击查看代码
//Delete a node from bst
#include<iostream>
struct node {
    int data;
    node* left;
    node* right;
};
node* getnewnode(int x)
{
    node* temp = new node;
    temp->data = x;
    temp->left = temp->right = NULL;

    return temp;
}
void insert(node*& travptr, int data) {//Node*& travptr 表示 travptr 是一个引用,引用的是一个指向 Node 类型的指针

    if (travptr == NULL)
    {
        travptr = getnewnode(data);
        return;
    }
    (data > travptr->data) ? insert(travptr->right, data) : insert(travptr->left, data);
}
int findmin(node* run) {//副本
    while (run->left != NULL) {//关注结束条件即可
        run = run->left;
    }//类似链表
    return run->data;
}//时间复杂度:O(logn)in best case(balanced bst)

node* Delete(node* root,int x) {
    if(root==NULL) return root;
    if(x<root->data) root->left=Delete(root->left,x);
    else if(x>root->data) root->right=Delete(root->right,x);
    else {
        if(root->left==NULL&&root->right==NULL) {//删除叶子
            delete root;root=NULL;
        }
        else if(root->left==NULL) {//删除单子节点
            node* temp=root;
            root=root->right;
            delete temp;//temp是局部变量,不用NULL
        }
        else if(root->right==NULL) {//删除单子节点
            node* temp=root;
            root=root->left; 
            delete temp;
        }
        else {//删除双子节点
            int min=findmin(root->right);//右子树最小元素
            root->data=min;//用右子树最小元素占据待删除元素位
            root->right=Delete(root->right,min);//删除右子树最小元素
        } 
    }
    return root;
}

int main() {
    node* root = NULL;
    insert(root, 2);
    insert(root, 1);
    insert(root, 3);
    insert(root, 0);
    insert(root, 5);
    Delete(root,0);
    int x=findmin(root);
    std::cout<<x;
}

标签:node,right,15,temp,bst,data,NULL,root
From: https://www.cnblogs.com/whvivy/p/18016308

相关文章

  • 2.15随笔
    今天学习到了一个关于dp的小技巧,我就叫它“加维”了。当发现无论怎么列状态转移方程,都会存在变量时,就可以尝试加维,扩展一个变量的更新。例如bicycles这道题,它相比其他的图论多了一个可以更换自行车,导致无论怎么写传统的dij都无法更新自行车的变更,因此我们就可以加维,来能够更新自......
  • 20240215打卡
    使用MPAndroidChart第三方框架绘制柱状图:1.**在build.gradle文件中添加依赖项**(低版本可以导入jar包):打开您的项目的build.gradle文件,然后在dependencies部分添加MPAndroidChart的依赖项。```groovydependencies{implementation'com.github.PhilJay:MPAndroidCh......
  • 2023.2.15 LGJ Round
    A\(n\)个点,有\(m\)种操作\((w,l,r)\),代表贡献是\(w\),并消除\([l,r]\)的所有点。操作的条件是必须消除一个点,问最多的贡献是多少。\(n,m\le300\).考虑从小区间开始操作,不难联想到区间dp。\(dp_{i,j}\)代表\([l,r]\)都被消除的最大贡献。对于\(dp_{i,j}\),我们枚举......
  • 2024.2.14 WC24 线段树 / CF1572D / lgP3679
    西安Day1。感冒还没好,牙龈炎也没好,明天还要考试,又要坐牢了/kk。今天是tyy的图论选讲,感觉前面网络流部分还是在线的,平面图部分毒瘤tyy拿出了他的员交课件,恐怖,直接下线了。看了NAVI和Faze的预选赛,你们俩怎么都打的这么稀碎/fn。Override真好听。「WC2024」线段树我......
  • P1152 欢乐的跳
    1.题目介绍欢乐的跳题目描述一个\(n\)个元素的整数数组,如果数组两个连续元素之间差的绝对值包括了\([1,n-1]\)之间的所有整数,则称之符合“欢乐的跳”,如数组\(\{1,4,2,3\}\)符合“欢乐的跳”,因为差的绝对值分别为:\(3,2,1\)。给定一个数组,你的任务是判断该数组是否符合“......
  • Go 100 mistakes - #15: Missing code documentation
    Documentationisanimportantaspectofcoding.ItsimplifieshowclientscanconsumeanAPIbutcanalsohelpinmaintainingaproject.InGo,weshouldfollowsome rulestomakeourcodeidiomatic.First,everyexportedelementmustbedocumented.Wheth......
  • Debug: tf_ditribute_strategy_worker.yaml: unknown field "spec.template.spec.node
    [ERROR:unknownfield"spec.template.spec.nodeAffinity"](base)maye@maye-Inspiron-5547:~/github_repository/tensorflow_ecosystem/distribution_strategy$kubectlapply-fmaye_template.yamlservice/dist-strat-example-worker-0createdservice/dis......
  • Check if a given binary tree is BST【2月14日学习笔记】
    点击查看代码//CheckifagivenbinarytreeisBST#include<iostream>#defineMIN-999999#defineMAX999999structnode{intdata;node*left;node*right;};node*getnewnode(intx){node*temp=newnode;temp->data=x;......
  • day15_scp与ntp服务
    今日笔记,服务管理回顾systemctl你的机器,会有默认的软件(服务),network管理网络的软件,sshd提供远程连接的软件对这些服务,进行管理启动停止重启重新加载开机自启(持久化)禁止开机自启查询是否持久化(是否开机自启)centos7,用这个命令,同时对服务进行启停管理,以及开机自启......
  • 「杂题乱刷」洛谷 P10155
    题目链接P10155[LSOT-2]基于二分查找与插入的快速排序解题思路算法一:容易发现,当\(a_n\)不为\(n\)时,我们无论如何都无法将\(n\)这个值插入到最后一位,否则我们可以依次将所有数字从大到小插入,这样也可以保证失去最少的贡献。视写法获得\(40\)分或\(60\)分。算法二......