二叉查找树的Insert和Delete操作

struct TreeNode{
    SearchTree Left;
    SearchTree Right;
    ElementType Ele;
};
/*递归一定有出口*/
/*递归代码就是要重复使用*/
SearchTree
Insert( SearchTree T, X )
{
    /*这个是对树中没有该参数,增加节点*/
    if( T == NULL )
    {
        T = malloc( sizeof( struct TreeNode ) );
        if( T == NULL )
            fatalError();
        T->Ele = X;
        T->Left = NULL;
        T->Right = NULL:
    }
    /*继续比较*/
    else
    if(T->Ele > X )
        T->Left = Insert( T->Left, X );//对于没有左子节点,返回新建节点指针,若有,在递归返回时,则相当于什么都没做
    else
    if( T->Ele < X )
        T->Right = Insert( T->Right, X );

    return T;
}

SearchTree
FindMin(SearchTree T )
{
    if(T == NULL)
        return NULL;//只针对第一次
    if( T->Left != NULL )
        return FindMin( T->Left );
    return T;
}

//二叉查找树的删除例程
SearchTree
Delete( SearchTree T, ElementType X )
{
    S earchTree TmpCell;
    if( T == NULL )
        Error("no Element found");
    if( T->Ele > X )
        T->Left = Delete( T->Left, X );
    else if( T->Ele < X )
        Delete( T->Right, X );
    else if( T->Right && T->Left )
    {
        TmpCell = FindMin(T->Right);
        T->Ele = TmpCell->Ele;
        Delete( TmpCell, T->Ele );
    }
    else//供给1.删除只有一个或没有儿子的父节点2.删除右子树最小节点
    {
        if( T->Left == NULL )
            T = T->Right;
        else if(T->Right == NULL )
            T = T->Left;
    }
    return T;
}

时间: 2024-10-06 00:22:30

二叉查找树的Insert和Delete操作的相关文章

LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作

我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作.这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作 插入(Insert) 1.简单形式 说明:new一个对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges()提交到数据库. NorthwindDataContext db = new NorthwindDataContext(); var newCustomer

sqlserver 大数据量的insert、delete操作优化

http://blog.csdn.net/lanyuzhen/article/details/7547476 --大批量导出orders表:insert DBCC DROPCLEANBUFFERS  DBCC FREEPROCCACHE goSET NOCOUNT ON BEGIN TRANSACTION  INSERT INTO test.dbo.orders with(tablock) SELECT * FROM bak.dbo.OrdersWHERE ordertime BETWEEN '

[转]NHibernate之旅(5):探索Insert, Update, Delete操作

本节内容 操作数据概述 1.新建对象 2.删除对象 3.更新对象 4.保存更新对象 结语 操作数据概述 我们常常所说的一个工作单元,通常是执行1个或多个操作,对这些操作要么提交要么放弃/回滚.想想使用LINQ to SQL,一切的东西都在内存中操作,只有调用了DataContext.SubmitChanges()方法才把这些改变的数据提交到数据库中,LINQ to SQL那么提交要么回滚. 我们使用NHibernate也一样,如果只查询数据,不改变它的值,就不需要提交(或者回滚)到数据库. 注意

数据库编程3 Oracle 子查询 insert update delete 事务 回收站 字段操作 企业级项目案例

[本文谢绝转载原文来自http://990487026.blog.51cto.com] <大纲> 数据库编程3 Oracle 子查询 insert update delete 事务 回收站 字段操作 企业级项目案例 实验所用数据表 子查询,解决一步不能求解 查询工资比scott高的员工信息: 子查询知识体系搭建: 解释3,查询部门是sales的员工信息: 方法1:子查询 [方法2]:多表: 优化考虑: 解释4[select],只能放单行子查询 解释4[from] 考题:显示员工姓名,薪水 解释

数据库的增删查改insert,delete,select,update

insert:一般只要参数个数和类型没问题,不会插入异常 INSERT INTO t_pos_dynamic_map(autoid, lt_termno, lt_merchno) VALUES(SEQ_Pos_dynamic_Map_Autoid.NEXTVAL, lTradeInfo.Ltl_Termno, lTradeInfo.Ltl_Merchno); delete: delete from nac_user.t_nac_route_log        删除整表记录,可回滚还原 trun

wikioi 1285 伸展树delete操作

题目描述 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<2^31),而他也给每个处在收养所的宠物一个特点值.这样他就能够很方便的处理整个领养宠物的过程了,宠物收养所总是会有两种情况发生:被遗弃的宠物过多或者是想要收养宠物的人太多,而宠物太少. 1. 被遗弃的宠物过多时,假若到

linux下mysql Insert update delete 事务 用户管理

linux下mysql Insert update delete  事务 用户管理 1.INSERT插入语句格式: INSERT INTO tb_name (字段1, 字段2, ...) VALUES (值1,值2, ...)[,(值1, 值2, ...),...]; INSERT INTO 表名 SET 字段1=值1,字段2=值2,...; INSERT INTO 表名 (字段1,字段2,...) SELECT (字段1,字段2,...) FROM 表名 [WHERE 条件]; 2.REPLA

表上的DELETE操作

在今天的文章里,我想给你快速展示下当我们从表里删除记录时,在SQL Server里发生了什么.首先我们来创建一个简单的表,在8KB的页上刚好能插入4条记录. 1 -- Create a simple table where 4 records fit onto 1 page 2 CREATE TABLE TestTable 3 ( 4 Col1 INT IDENTITY(1, 1), 5 Col2 CHAR(2000) 6 ) 7 GO 接下来我们插入4条记录,这样的话一个页刚好全部填满. 1

veridata实验举例(4)验证veridata查找出updata、delete操作导致的不同步现象

veridata实验举例(4)验证veridata查找出updata.delete操作导致的不同步现象 续接:<veridata实验举例(3)验证veridata查找出insert操作导致的不同步现象>,地址:点击打开链接 环境: Item Source System Target System Platform Red Hat Enterprise Linux Server release 5.4 Red Hat Enterprise Linux Server release 5.4 Hos