二叉排序树的删除

上传人:re****.1 文档编号:560712449 上传时间:2023-10-02 格式:DOCX 页数:3 大小:9.87KB
返回 下载 相关 举报
二叉排序树的删除_第1页
第1页 / 共3页
二叉排序树的删除_第2页
第2页 / 共3页
二叉排序树的删除_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《二叉排序树的删除》由会员分享,可在线阅读,更多相关《二叉排序树的删除(3页珍藏版)》请在金锄头文库上搜索。

1、二叉排序树的删除对于一般的二叉树来说,删去树中的一个结点是没有意义的,因为它将使以被删除的结点为根的子树变成森林, 破坏了整棵树的结构 但是,对于二叉排序树,删去树上的一个结点相当于删去有序序列中的一个记录,只要在删除某个结点后不改变 二叉排序树的特性即可。在二叉排序树上删除一个结点的算法如下:btree * DeleteBST(btree *b, ElemType x)if (b)if (b-data = x)b = DelNode(b);else if (b-data x)b-lchild = DeleteBST(b-lchild, x);elseb-rchild = DeleteBST(

2、b-rchild, x);return b; 其中删除过程有两种方法。第一种过程如下:1。若p有左子树,找到其左子树的最右边的叶子结点r,用该叶子结点r来替代p,把r的左孩子 作为r的父亲的右孩子。2。若p没有左子树,直接用p的右孩子取代它。第二种过程如下:1。若p有左子树,用p的左孩子取代它;找到其左子树的最右边的叶子结点r,把p的右子树作为r 的右子树。2。若p没有左子树,直接用p的右孩子取代它。两种方法各有优劣,第一种操作简单一点点,但均衡性不如第二种,因为它将结点p的右子树 全部移到左边来了。下面将分别以两种种思路编写代码。第一种:btree * DelNode(btree *p)if

3、 (p-lchild)btree *r = p-lchild; /r 指向其左子树;while(r-rchild != NULL)/搜索左子树的最右边的叶子结点rr = r-rchild;r-rchild = p-rchild;btree *q = p-lchild; /q 指向其左子树;free(p);return q;elsebtree *q = p-rchild; /q 指向其右子树; free(p);return q;第二种: btree * DelNode(btree *p) if (p-lchild)btree *r = p-lchild; /r 指向其左子树;btree *pre

4、r = p-lchild; /prer 指向其左子树;while(r-rchild != NULL)/搜索左子树的最右边的叶子结点rprer = r; r = r-rchild;if(prer != r)若r不是p的左孩子,把r的左孩子作为r的父亲的右孩子prer-rchild = r-lchild; r-lchild = p-lchild; 被删结点p的左子树作为r的左子树r-rchild = p-rchild; 被删结点p的右子树作为r的右子树free(p); return r;elsebtr ee *q = p- rchild; /q 指向其右子树; free(p);return q;

5、但是上面这种方法,把r移来移去,很容易出错,其实在这里我们删除的只是p的元素值,而不是它的地址, 所以完全没有必要移动指针。仔细观察,发现我们删除的地址实际上是p的左子树的最右边的叶子结点r的地址, 所以我们只要把r的数据填到p中,然后把r删除即可。算法如下:btree * DelNode(btree *p)if (p-lchild)btree *r = p-lchild; r 指向其左子树;btree *prer = p-lchild; /prer 指向其左子树;while(r-rchild != NULL)/搜索左子树的最右边的叶子结点rprer = r;r = r-rchild;p-data = r-data;if(prer != r)若r不是p的左孩子,把r的左孩子作为r的父亲的右孩子 prer-rchild = r-lchild;elsep-lchild = r-lchild; 否则结点p的左子树指向r的左子树free(r);return p;elsebtr ee *q = p- rchild; q 指向其右子树; free(p);return q;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号