二叉搜索树

Posted joezzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉搜索树相关的知识,希望对你有一定的参考价值。

二叉搜索树

定义

  是一棵二叉树,任何节点的值一定大于其左子树中每一个节点的值,小于其右子树每一个节点的值

AVL平衡二叉搜索树

定义

  一棵二叉搜索树,任何节点的左子树高度和右子树高度最多相差1,严格平衡

技术分享图片

  节点58左子树高度3,右子树高度0,相差3,所以不是平衡二叉树

节点结构

  data、bf(平衡因子=左子树高度-右子树高度)、left指针、right指针

如何解决插入导致的平衡破坏

节点插入后,某节点X的左子树和右子树高度的差变成了2,破坏了平衡,可分为四种情况:

  1.外侧插入:左左——插入点位于X左子节点的左子树

  2.外侧插入:右右——插入点位于X右子节点的右子树

  3.内侧插入:左右——插入点位于X左子节点的右子树

  4.内侧插入:右左——插入点位于X右子节点的左子树

技术分享图片

对于外侧插入,采用单旋转修正:左左(右单旋),右右(左单旋);

对于内侧插入,采用双旋转(两次单旋转)修正:左右(左单旋+右单旋),右左(右单旋+左单旋)

各种操作的时间复杂度

  查找、插入、删除:O(logn)

红黑树

定义

是一棵二叉搜索树,确保最长路径不大于两倍的最短路径的长度,近似于平衡,且满足5个规则:

  1.每个节点要么是红色,要么是黑色

  2.根节点必为黑色

  3.如果某个节点为红色,其儿子节点必须为黑色

  4.任何一个节点至NULL的任何路径,所含黑色节点的数目相同

  5.NULL视为黑色

规则4导致新增节点必须为红色,进而根据规则3,新增节点的父节点又必须为黑色,但是又需要根据二叉搜索树的规则来添加新增节点,所以可能会引发矛盾。此时,就需要调整颜色并旋转来修正

节点结构

  color(枚举型)、key、value、left指针、right指针、parent指针(红黑树的各种操作经常要上溯到父节点)

各种操作的时间复杂度

  查找、插入、删除:O(logn)

与AVL平衡二叉搜索树的比较

  未完待续

以上是关于二叉搜索树的主要内容,如果未能解决你的问题,请参考以下文章

二叉树二叉搜索树中的众数(leetcode501)

手撕STL二叉搜索树

手撕STL二叉搜索树

LeetCode-树二叉搜索树与双向链表

数据结构学习笔记04树(二叉树二叉搜索树平衡二叉树)

算法漫游指北(第十三篇):二叉树的基本概念满二叉树完全二叉树二叉树性质二叉搜索树二叉树定义二叉树的广度优先遍历