码迷,mamicode.com
首页 > 其他好文 > 详细

二叉搜索树

时间:2018-09-08 23:31:16      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:ext   长度   最长路径   枚举   大于   搜索   src   key   parent   

二叉搜索树

定义

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

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平衡二叉搜索树的比较

  未完待续

二叉搜索树

标签:ext   长度   最长路径   枚举   大于   搜索   src   key   parent   

原文地址:https://www.cnblogs.com/Joezzz/p/9610861.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!