二叉排序树的删除和查找

  二叉排序树的删除和查找可以用递归实现,也可以用循环实现。

1.查找

1.1查找值

bool search(tnode * root,int value)

{

        (!root)   FALSE;

       while(root->data!=value)

                   .................


}



1.2 查找中序遍历的前缀或者后缀

node * search_node(tnode * root,int value)

思路同上,每次比较之后选择是->lchild,->rchild


2.删除

思路,找到前缀pre,删除思路根据节点拥有的的子树决定

2.1 分类

删除叶子:例如叶子是前缀的左子树,则pre->lchild=NULL。

删除只有左或右子树的节点:将节点的非空子树赋值给节点前缀的相应子树。这类删除退化成单链表的删除。

删除有左和右子树的节点:先取得要删除的节点,可以再取左子树的最大值,或右子树的最小值,将值取代要删除的值,然后将此节点删除。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值