数据结构 之 二叉排序树

1、什么是二叉排序树

在这里插入图片描述
二叉排序树 又叫(排序树 搜索数)他是一个一棵空树,或者是一棵具有如下性质的树:
1)若左子树不为空,那么左子树上面的所有节点的关键字值都比根节点的关键字值小
2)若右子树不为空,那么右子树上面的所有节点的关键字值都比根节点的关键字值大
3)左右子树都为二叉树
4)没有重复值(这一点在实际中可以忽略)

2、如何遍历

二叉树中序遍历,先访问左节点,然后访问中间节点,然后在访问右节点
如上图 中序遍历一个树,
1、先访问根节点的左子树 12 ,它有左子树? 有 --> 结果:
2、访问 12 的左子树 9 ,它有左子树? 没有 --> 结果:9
3、它有右子树? 没有,访问上一级 --> 结果:9 12
4、12 是否有右子树 ? 有 , 访问 40 --》 结果: 9 12
5、 40是否有左子树? 有, 访问 35 ,且35 没有左子树 --> 结果: 9 12 35
6、 检查35 是否有右子树? 没有 , 访问它的根节点 --》 结果: 9 12 35 40
7、检查 40 是否有右子树? 有,访问 190 ,它有左子树
8、访问它的左子树 146, 检查它有左子树? 没有 —》 结果: 9 12 35 40 146
9、检查它有右子树? 无 , 访问它的父节点 190 --》 结果 : 9 12 35 40 146 190
10、 检查190 它是否有右子树? 无, 根节点的左子树全部遍历完成 ,访问根节点 --》结果: 9 12 35 40 146 190 381

。。。。

依次类推

最终的结果是:9 12 35 40 146 190 381 394 410 445 476 540 600 760 800
可以看出 中序遍历得到的就是一个经过排序以后的 数组

3、查询 删除

在这里插入图片描述
删除节点需要考虑的有四种情况:

  1. 节点是叶子 如 1 4 7节点
    删除方式 就是斩断父子节点的引用链接
    只需要将父节点的左子树或者右子树置为null 然后将目标节点的父节点的也置为null

  2. 节点只有左孩子 如 2 节点
    删除方式就是把 找到1号节点的左右子节点的最小树 放在 2位置

  3. 节点只有右孩子 如 6 节点
    同 2一样 找到 找到 7 号节点的最小值节点, 然后替换到 6号节点位置

  4. 节点既有左孩子 又有右孩子 如 3 和 5
    需要找到右子节点树上的最小位置, 然后把目标节点的左子树 放在这个最小值节点的左边, 然后切断最小节点与父节点的链接,然后把目标节点的右子树 接到这个最小值节点的做右子树上最大值节点上。
    在这里插入图片描述

发布了58 篇原创文章 · 获赞 16 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/dingshuhong_/article/details/104456306