转载:二叉搜索树(+新增理解笔记)

转载:数据结构与算法——平衡二叉树

理解笔记:
1二叉搜索树又称二叉查找树,亦称为二叉排序树

就是二叉树经过排序的,排序规则是左子树上所有节点的值均小于它的根节点的值,右子树上所有节点的值均大于它的根节点的值

2遍历:递归实现
[
(1)如果树是空的,则查找结束,无匹配。
(2)如果被查找的值和节点的值相等,查找成功。
(3)如果被查找的值小于节点的值,递归查找左子树,
(4)如果被查找的值大于节点的值,递归查找右子树,
]

3插入:递归实现 --注意递归时找到的条件是插入的节点是空的说明找到了
[
(1)先检测该元素是否在树中已经存在。如果已经存在,则不进行插入;
(2)若元素不存在,则进行查找过程,并将元素插入在查找结束的位置。
]

4删除:
[
(1)删除节点为叶子节点
[
删除叶子节点的方式最为简单,只需查找到该节点,直接删除即可
]

(2) 删除的节点只有左子树
[
删除的节点若只有左子树,将节点的左子树替代该节点位置
]
(3)删除的节点只有右子树
[
删除的节点若只有右子树,将节点的右子树替代该节点位置
]

(4) 删除的节点既有左子树又有右子树。
[
若删除的节点既有左子树又有右子树,这种节点删除过程相对复杂。其流程如下:
  (1)遍历待删除节点的左子树,找到其左子树中的最大节点,即删除节点的前驱节点;
  (2)将最大节点代替被删除节点;
  (3)删除左子树中的最大节点;
  (4)左子树中待删除最大节点一定为叶子节点或者仅有左子树。按照之前情形删除即可。

注:同样可以使用删除节点的右子树中最小节点,即后继节点代替删除节点,此流程与使用前驱节点类似。

提示:
[
左子树的最大节点,即最右边,因为最右边的值最大
右子树的最小节点,即最左边,因为最左边的值最小

删除方式:
删除右子树的最小节点,相当于断开最左节点,并把最左节点值赋值给删除节点
删除左子树的最大节点,相当于断开最右节点,并把最右节点值赋值给删除节点

代码的最后采用的是删除左子树的最大节点,具体判断的理解:
[
q=*p;
s=(*p)->lchild;
while(s->rchild) // 转到左子树,然后向右到尽头(找待删节点的前驱) */
{
q=s;
s=s->rchild;
}
(*p)->key=s->key; //s指向被删节点的直接前驱(将被删节点前驱的值取代被删节点的值)
if(q!=*p)
q->rchild=s->lchild; //重接q的右子树
else
q->lchild=s->lchild; //重接q的左子树
free(s);

如果 if(q!=*p)代表断开的是该节点的左节点有右节点,所以断开的是右节点,所以需要把断开位置的左节点补上去(即断开的右节点上)
else后面代表断开的是该节点的左节点(说明没有有右节点),所以需要把断开的节点的左节点补上去(即断开的左节点上)

提示:断开的是左,就要补左,断开的是右,就要补右;因为找的是最右边的节点,所以断开位置的节点剩下左节点,
就用此断开的节点的左节点补

简单看法:就看断开的方向,是哪个方向就补哪个方向的
]

]

]

]

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值