二叉查找树、平衡二叉树和红黑树

首先说一下,凡是每个节点最多只有两个子节点的树都叫二叉树。

二叉查找树

二叉查找树,也称二叉搜索树,或二叉排序树。其定义也比较简单,要么是一颗空树,要么就是具有如下性质的二叉树:

(1)若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

(2) 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

(3) 任意节点的左、右子树也分别为二叉查找树;

(4) 没有键值相等的节点。

平衡二叉树(AVL二叉树)

?  平衡二叉搜索树,又被称为AVL树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

红黑树

一种二叉查找树,但在每个节点增加一个存储位表示节点的颜色,可以是红或黑(非红即黑)。通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保没有一条路径会比其它路径长出两倍,因此,红黑树是一种弱平衡二叉树(由于是弱平衡,可以看到,在相同的节点情况下,AVL树的高度低于红黑树),相对于要求严格的AVL树来说,它的旋转次数少,所以对于搜索,插入,删除操作较多的情况下,我们就用红黑树。

Attention:

  • 平衡树(AVL)是为了解决 二叉查找树(BST)退化为链表的情况。
  • 红黑树(RBT)是为了解决 平衡树 在删除等操作需要频繁调整的情况

参考:https://www.liangzl.com/get-article-detail-136354.htmlhttps://blog.csdn.net/qq_25940921/article/details/82183093https://www.jianshu.com/p/d25e490e2441

原文地址:https://www.cnblogs.com/fxtx/p/11594255.html

时间: 2024-10-27 06:18:05

二叉查找树、平衡二叉树和红黑树的相关文章

二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)的比较

http://www.iteye.com/topic/614070 此少侠总结的特棒,直接收藏了. 我们这个专题介绍的动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree).这四种树都具备下面几个优势: (1) 都是动态结构.在删除,插入操作的时候,都不需要彻底重建原始的索引树.最多就是执行一定量的旋转,变色操作来有限的改变树的形态.而这些操作所付出的代价都远远小于重建一棵树.这一优势在<查找结构专题(1):静态查找结构概论 >中讲到

平衡二叉树和红黑树最差情况性能分析

平衡二叉树和红黑树最差情况分析 1.经典平衡二叉树 平衡二叉树(又称AVL树)是带有平衡条件的二叉查找树,使用最多的定理为:一棵平衡二叉树是其每个节点的左子树和右子树的高度最多差为1的二叉查找树.因为他是二叉树的一种具体应用,所以他同样具有二叉树的性质.例如,一棵满二叉树在第k层最多可拥有个节点(性质1).一棵树的高度为其从根节点到最底层节点经过的路径数(例如只含一个节点的树的高度为0)(性质2).并且已被证明,一棵含有N个节点的平衡二叉树的高度最多(粗略来说)为. 下面我们来尝试总结如何得到一

TreeMap源码分析之一 —— 排序二叉树、平衡二叉树、红黑树

一.排序二叉树(BST树) 1.排序二叉树的定义 排序二叉树,Binary Sort Tree 排序二叉树要么是一棵空二叉树,要么是具有下列性质的二叉树: (1)若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值: (2)若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值: (3)它的左.右子树也分别为排序二叉树. 按中序遍历排序二叉树可以得到由小到大的有序序列. 比如 2.排序二叉树的插入和删除 二.平衡二叉树(Balanced Binary Tree,AVL树) 三.红黑

平衡二叉树 之 红黑树

[原文链接] 1. 红黑树的特性 Red-Black Tree (  RBT)也是一种自平衡二叉树,其统计性能要好于 AVL树 .它是在1972年由 鲁道夫·贝尔 发明的,它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的.它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的.[参考Wiki] 一般的,红黑树同时满足以下五大特性: 所有节点的颜色是红色或者黑色: 根节点是黑色: 所有的叶子节点是黑色(叶子节点包含

排序二叉树,平衡二叉树和红黑树的概念以及相关的操作讲解

1. 排序二叉树     排序二叉树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索. 排序二叉树要么是一棵空二叉树,要么是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值: 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值: 它的左.右子树也分别为排序二叉树. 图 1 显示了一棵排序二叉树: 图 1. 排序二叉树 对排序二叉树,若按中序遍历就可以得到由小到大的有序序列.如图 1 所示二叉树,中序遍历得: {2,3,4,8,9,9

浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点. 二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍. 一 定义 二叉查找树(B

树-二叉查找树、红黑树

二叉查找树的性质: 如果节点的左子树不空,则左子树上所有结点的值均小于等于它的根结点的值: 如果节点的右子树不空,则右子树上所有结点的值均大于等于它的根结点的值: 任意节点的左.右子树也分别为二叉查找树: 二叉查找树查找某个结点时,是二分查找的思想,查找所需的最大次数等同于二叉树的高度. 缺陷:二叉查找树多次插入新节点时,有可能导致二叉查找树的不平衡,变成线性结构. 二叉查找树的优化=> 红黑树 1.节点是红色或黑色. 2.根节点是黑色. 3.所有叶子都是黑色(叶子是NIL节点). 4.每个红色

数据结构-红黑树

转自:http://dongxicheng.org/structure/red-black-tree/ 1. 简介 红黑树是一种自平衡二叉查找树.它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用.在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持).它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它

红黑树,TreeMap,插入操作

红黑树 红黑树顾名思义就是节点是红色或者黑色的平衡二叉树,它通过颜色的约束来维持着二叉树的平衡.对于一棵有效的红黑树二叉树而言我们必须增加如下规则: 1.每个节点都只能是红色或者黑色 2.根节点是黑色 3.每个叶节点(NIL节点,空节点)是黑色的. 4.如果一个结点是红的,则它两个子节点都是黑的.也就是说在一条路径上不能出现相邻的两个红色结点. 5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点. 这些约束强制了红黑树的关键性质: 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长