查找二叉树(BST)

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/qq_30650153/article/details/81782927

1、查找二叉树的定义

先上图:
这里写图片描述

一棵二叉搜索树(Binary Sort Tree)是以一棵二叉树来组织的,可以用链表数据结构来表示,其中,每一个结点就是一个对象,一般地,包含数据值和指向孩子(也可能是父母)的指针。如果某个孩子结点不存在,其指针为空(NULL)。

  • 查找树的左右子树各是一棵查找树
  • 若查找树的左子树非空,则其左子树上的各节点值均小于根节点的值。
  • 若查找树的右子树非空,则其右子树上的各节点值均大于根节点的值。

2、查找树的基本操作

  • 查找
  • 插入节点
  • 删除节点

2.1 查找

二叉搜索树很多时候用来进行数据查找。这个过程从树的根结点开始,沿着一条简单路径一直向下,直到找到数据或者无法找到返回NULL值。从图中可以看出,在查找二叉树中查找很容易,比大小就可以,小就向左找,大就向右找。
例如说,查找12。
步骤:

  • 12<16,向左找,与9去比较
  • 12>9,向右找,与12去比较
  • 12=12,找到了

2.2 插入

在查找树中插入一个节点需要分情况:

  • 如果相同键值的节点已经存在,则不再插入
  • 如果查找树为空,则已新节点为查找树
  • 将要插入节点的键值与插入后的父节点的键值比较,就能确定新节点是父节点的左子节点,还是右子节点。

2.3 删除

在查找树中删除一个节点需要分情况:

  • 若待删除的节点是叶子节点,则直接删除该节点
  • 若待删除的节点只有一个子节点,则将待删除节点父节点与其子节点直接相连,然后删除该节点
  • 若待删除的节点有两个子节点,则在其左子树上,用中序遍历寻找值最大节点s,用节点s的值代替该节点的值,然后删除节点s,且节点s必属上述两种情况之一

例题1:

利用逐点插入法建立序列(50,72,43,85,75,20,35,45,65,30)对应的二叉排序树以后,查找元素30要进行__次元素间的比较
A. 4
B.  5
C.  6
D.  7

插入是指把每个节点都看成查找树,因此可以画出:
这里写图片描述

例题2:

在常用的描述二叉排序树的存储结构中,关键字值最大的节点__
A. 左指针一定为空
B. 右指针一定为空
C. 左、右指针均为空
D. 左右指针均不为空

猜你喜欢

转载自blog.csdn.net/qq_30650153/article/details/81782927