25 二叉排序树的插入和删除(严 9.35、9.36 和 9.37)

题目

description
假设二叉排序树以后继线索链表作存储结构,编写程序,满足以下要求:
1. 输出该二叉排序树中所有大于 a 小于 b 的关键字;
2. 在二叉排序树中插入一个关键字;
3. 在二叉排序树中删除一个关键字。
input
第一行按先序输入二叉排序树各结点(结点值大于 0),其中-1 表示取消建立子树结点;
第二行输入要求 1 中 a、b,用空格隔开;
第三行输入要求 2 中要插入的关键字;
第四行输入要求 3 中要删除的关键字。
output
按照中序序列,分三行输出要求 1、要求 2 和要求 3 的结果。
sample_input
12 8 4 -1 -1 10 -1 -1 16 13 -1 -1 18 -1 -1
10 17
6
12
sample_output
12 13 16
4 6 8 10 12 13 16 18
4 8 10 13 16 18

思路

  1. 输入创建二叉排序树
    见上一篇文章《24 二叉排序树的判别(耿 8.6)》
  2. 查找
    依然是递归
void search(BTNode *T, int a, int  b) {
   
	if (T) {
   
		search(T->lc, a, b);
		if (a < T->key && T->key < b)
			cout << T->key << " ";
		search(T->rc, a, b);
	}
}
  1. 插入
    和查找类似,如果要插入的关键字存在,则直接返回,否则递归查找要插入的位置,直到找到合适的空指针,找到空指针的时候创建新结点,然后将关键字插入。
void insert(BTNode *&T, int p) {
   
	if (!T) {
   
		T = (BTNode *)malloc(sizeof(BTNode));
		T->key = p;
		T->lc = T->rc = NULL;
		return;
	} else {
   
		if (T->key == p) {
   
			return;
		} else if (T->key > p) {
   
			insert(T->lc, p);
		} else {
   
			insert(T->rc, p);
		}
	}
}
  1. 删除
    deleteT()与查找思想类似。
    若直接删除二叉排序树中的某个结点,则会剩下两个二叉排序树。故编写RemoveBTNode()。
    以下内容转载于文章: 二叉排序树(查询、插入、删除).
    删除节点有三种情况分析:

    a. 叶子节点;(直接删除即可)

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值