二叉查找树(C++)

背景:

  最近我要学习二叉平衡树了,在学习二叉平衡树之前,我需要学会二叉搜索树,因为二叉平衡树就是根据二叉搜索树的思想进行优化的。

二叉查找树简介:

  二叉查找树是什么呢?(也叫二叉搜索树)就是字面意思,首先是一颗二叉树:一棵树,最多分两个叉。

1.1 满二叉树

 上面那个图就是一颗二叉树,同时也是一颗满二叉树:每一个节点都有两个儿子,左儿子和右儿子。

  同时啊,还有完全二叉树:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树

1.2 完全二叉树

   然后最后一张图,就是普通的二叉树(就是只有每一个结点最多有两个儿子这一个特性):

1.3 普通二叉树

   然后,我们在看“搜索”,也就是说,我们建立起来的这颗二叉树,是用来搜索的,我们知道,搜索有很多种算法都可以,二分查找,枚举查找,启发式查找,为什么要用感觉很复杂的二叉树进行查找呢?那肯定是因为用二叉查找树来搜索比这些算法都快呀!

  接下来,给大家说一下二叉查找树的定义:一棵二叉树(满二叉树,完全二叉树,普通二叉树都可以),从根节点开始,根节点的左儿子一定小于根节点,根节点的右儿子肯定大于根节点,根节点的左儿子的左儿子也是一样,小于根节点的左儿子,根节点的左儿子的右儿子一定大于根节点的左儿子,以此类推,除了叶子节点,其他节点必须满足这个要求(等于的话算右儿子)

  也就是说,一棵二叉搜索树的所有左子节点肯定都小于根节点,所有的右子节点肯定都大于等于根节点,这样做有什么好处呢?首先,我们想要在二叉搜索树里查找一个数,首先比较第一个数与根节点的大小,如果一样,那就找到了,如果小于,那么前往左儿子那里继续重复这样的操作找,如果大于,那就前往右儿子那里继续重复这样的查找,直到找到为止。如果到了叶子节点,都没有找到这个数,那么在二叉搜索树里面就没有这个数。

  叶子结点就是一个没有左儿子和没有右儿子的结点(比方说上图1.3图中的4,8,9,6,10号结点就都是叶子结点)。

二叉查找树(二叉搜索树)

  以上这个图就是一棵二叉搜索树,每一个结点都符合左儿子小于结点,右儿子大于结点这一个条件,看上面这个数,是我们输入9个数之后建成的,如果用数组进行查找的话,最快需要1次,最久需要9次才可以找到,而这个二叉搜索树最快是1次,最慢只要3次就可以了,是按树的

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙星尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值