二叉排序树的创建 、删除操作

二叉排序树的创建 、删除操作

【问题描述】

请根据输入的数据创建一棵二叉排序树。然后执行相应操作。

1 删除某一值为x的结点

2 求指定结点y在二叉排序树中的层数

【输入形式】

结点数据,以0代表结束输入。

待删除的x,待求层数的y

【输出形式】

删除后的二叉排序树的中序遍历结果

y所在的层数

【样例输入】

29 39 15 25 28 10 11 2 0

10

11

【样例输出】

2 11 15 25 28 29 39

4

【样例说明】

若待删除的结点包含左右子树,则以其左子树的最右结点代替它。

#include <iostream>
#include<bits/stdc++.h>
#define MAX 100
using namespace std;

/*这样定义在编译时会报错
struct BSTnode
{
    int data;
    BSTnode *Rchild,*Lchild;
}*BSTree;
错误如下:
error: variable or field 'InsertBST' declared void|
error: 'bst' was not declared in this scope|
error: expected primary-expression before 'int'|
*/

//定义二叉树(以后推荐使用这种定义方法,减少编译器识别时发生出乎意外的error)
typedef struct node
{
   
    int data;
    node *Rchild,*Lchild;
}*BSTree,BSTnode;//这里我目前理解为 *BTSree是一个指针,因为指针可以移动,所以可以代表这棵二叉树  、BSTnode表示的只是一个结构体单元,只能代表这棵树的一部分

/*使用指针传递,由于BSTree本身就是一个指针所以,这里就会变成使用指针的指针,在调用函数是还需要使用&,代码看起来就不是很明了
1.在参数框里的 *bst 表示的是定义一个指针的指针
2.在函数体里的*bst表示指针的指针取值,即是表示的是二叉树的指针(指针的指针--->指针)
void InsertBST(BSTree *bst,int data)
{
    BSTree t;
    if(*bst==NULL)
    {
        t=(BSTree)malloc(sizeof(BSTnode));
        t->data=data;
        t->Rchild=NULL;
        t->Lchild=NULL;
        *bst=t;
    }
    else if(data>(*bst)->data)
    {
        InsertBST(&((*bst)->Rchild),data);
    }
    else if(data<(*bst)->data)
    {
        InsertBST(&((*bst)->Lchild),data);
    }
}*/
//使用引用传递
void InsertBST(BSTree &bst,int data)
{
   
    BSTree t;
    if(bst==NULL)
    {
   
        t=(BSTree)malloc(sizeof(BSTnode));
        t->data=data;
        t
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值