唯一比较需要思考的删除操作:

被删除节点有三种情况:

1、叶节点,直接删除

2、只有一个子节点,将子节点替换为该节点,删除该节点。

3、有两个子节点,从右分支中找到最小节点,将其值赋给被删除节点的位置,接着删除这个最小节点

 // 函数Insert将X插入二叉搜索树BST并返回结果树的根结点指针;

BinTree Insert(BinTree BST, ElementType X)
{
if (BST == NULL)
{
BST = (BinTree)malloc(sizeof(BinTree));
BST->Data = X;
BST->Left = NULL;
BST->Right = NULL;
}
if (X > BST->Data)
BST->Right = Insert(BST->Right, X);
if (X < BST->Data)
BST->Left = Insert(BST->Left, X);
return BST;
} // 函数Delete将X从二叉搜索树BST中删除,并返回结果树的根结点指针;如果X不在树中,则打印一行Not Found并返回原树的根结点指针;
BinTree Delete(BinTree BST, ElementType X)
{
if (BST == NULL)
{
printf("Not Found\n");
return NULL;
} if (X > BST->Data)
BST->Right = Delete(BST->Right, X);
else if (X < BST->Data)
BST->Left = Delete(BST->Left, X);
else if (X == BST->Data)
{
Position node;
if (BST->Left && BST->Right)
{
node = FindMin(BST->Right);
BST->Data = node->Data;
BST->Right = Delete(BST->Right, BST->Data);
}
else
{
node = BST;
if (BST->Left == NULL)
BST = BST->Right;
else if (BST->Right == NULL)
BST = BST->Left;
free(node);
}
}
return BST;
} //函数Find在二叉搜索树BST中找到X,返回该结点的指针;如果找不到则返回空指针;
Position Find(BinTree BST, ElementType X)
{
while (BST)
{
if (X == BST->Data)
return BST;
else if (X < BST->Data)
BST = BST->Left;
else if (X > BST->Data)
BST = BST->Right;
}
return NULL;
} //函数FindMin返回二叉搜索树BST中最小元结点的指针;
Position FindMin(BinTree BST)
{
if (BST == NULL)
return NULL;
while (BST->Left)
BST = BST->Left;
return BST;
} //函数FindMax返回二叉搜索树BST中最大元结点的指针。
Position FindMax(BinTree BST)
{
if (BST == NULL)
return NULL;
while (BST->Right)
BST = BST->Right;
return BST;
}

[PTA] 数据结构与算法题目集 6-12 二叉搜索树的操作集的更多相关文章

  1. PTA二叉搜索树的操作集 (30分)

    PTA二叉搜索树的操作集 (30分) 本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree BST, ElementType X ); BinTr ...

  2. 04-树7 二叉搜索树的操作集(30 point(s)) 【Tree】

    04-树7 二叉搜索树的操作集(30 point(s)) 本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree BST, ElementType ...

  3. PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分)

    PTA数据结构与算法题目集(中文)  7-39魔法优惠券 (25 分) 7-39 魔法优惠券 (25 分)   在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商 ...

  4. PTA数据结构与算法题目集(中文) 7-38寻找大富翁 (25 分)

    PTA数据结构与算法题目集(中文)  7-38寻找大富翁 (25 分) 7-38 寻找大富翁 (25 分)   胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假 ...

  5. PTA数据结构与算法题目集(中文) 7-34

    PTA数据结构与算法题目集(中文)  7-34 7-34 任务调度的合理性 (25 分)   假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行.“ ...

  6. PTA数据结构与算法题目集(中文) 7-31

    PTA数据结构与算法题目集(中文)  7-31 7-31 笛卡尔树 (25 分)   笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2.首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有 ...

  7. PTA数据结构与算法题目集(中文) 7-29

    PTA数据结构与算法题目集(中文)  7-29 7-29 修理牧场 (25 分)   农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L​i​​个长度单位,于是他购买了一条 ...

  8. PTA数据结构与算法题目集(中文) 7-16

    PTA数据结构与算法题目集(中文)  7-16 7-16 一元多项式求导 (20 分)   设计函数求一元多项式的导数. 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000 ...

  9. PTA数据结构与算法题目集(中文) 7-11

    PTA数据结构与算法题目集(中文)  7-11 7-11 关键活动 (30 分)   假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行.“任务调度 ...

随机推荐

  1. Setting up multi nodes live migration in Openstack Juno with devstack

    Setting up multi nodes live migration in Openstack Juno with devstack Summary Live migration overvie ...

  2. CKEditor 4.5 beta 发布,可视化 HTML 编辑器

    分享 <关于我> 分享  [中文纪录片]互联网时代                 http://pan.baidu.com/s/1qWkJfcS 分享 <HTML开发MacOSAp ...

  3. qt中文编码(好多方法)

    qt中文编码 来源:http://www.cublog.cn/u1/59481/showart_1947231.html 前些日子,被编码折磨了一段时间,总结一下Qt中的编码. [Qt 编码简单实验] ...

  4. Qt在Mac OS X下的编程环境搭建(配置Qt库和编译器,有图,很清楚)

    尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要 ...

  5. FreeCL

    FreeCL 1.03(Free Control Library)是一个开源且免费的Windows控件库,它属于3D图形引擎FreeGE中的一部分,用户可以自由地用于个人或商业开发.FreeCL使用类 ...

  6. Qt第三方圆形进度条-及其改进

    Qt第三方圆形进度条的改进 要实现一个圆形的进度条功能,在网上找到一个比较出名的第三方封装类:QRoundProgressBar,地址:sourceforge 的 QRoundProgressBar  ...

  7. IT++数学、信号、通讯类库,Blitz++数学,Armadillo 线性代数,Dlib网络,线程,图形,数学,图像,数据挖掘/机器学习,XML等等

    https://en.wikipedia.org/wiki/Blitz%2B%2B https://en.wikipedia.org/wiki/IT%2B%2B https://en.wikipedi ...

  8. VC 函数调用的 汇编代码 浅析

    摘要:主要谈谈vc里面函数调用汇编成汇编代码的情形,首先针对之前的一个小程序,说说vc编译器的优化. 例子程序: #include <iostream>using namespace st ...

  9. 浅谈js闭包(closure)

    相信很多从事js开发的朋友都或多或少了解一些有关js闭包(closure)的知识. 本篇文章是从小编个人角度,简单地介绍一下有关js闭包(closure)的相关知识.目的是帮助一些对js开发经验不是很 ...

  10. javascript“命名空间”的费曼输出[原创]

    Javascript由于没有命名空间的概念,所以好多的框架或库就用了某些“命名空间”的技巧.在学习作为函数的命名空间时,我翻阅了好多的书本和blog,很多的概念和说明都是要么过于烦杂或过于简单.现在由 ...