前言
- 本文力求用通俗易懂的方式來講解數據結構,在介紹紅黑樹之前先介紹一下什麼是查找二叉查找樹(Binary Search Tree)簡稱BST,什麼是平衡二叉樹(Balanced Binary Tree)又稱爲AVL樹
一、二叉查找樹的定義
- 先上圖
- 根據上圖大家可能發現了一定的規律,每個節點的左孩子都小於此節點而右孩子都大於此節點沒錯這正是二叉查找樹的一個特點
- 接下來咱們正規的講一下什麼是二叉查找樹
- 二叉查找樹可以是一顆空樹(即null)爲什麼會這條定義呢,個人認爲應該是爲了程序方便運行
- 當二叉查找樹不爲空時有如下定義
- 若它的左子樹不爲空,則左子樹上的節點值都小於它的根節點,若它的右子樹不爲空則右子樹上的所有節點值都大於它的根節點
- 它的左右子樹又分別爲二叉查找樹
二、二叉查找樹有什麼特點
- 例1: 將元素
3,4,5,6,7,8,9,10,11,12,13,14
存入到如下的線性表(也可以認爲是數組)查找元素10
需要從線性表第一個位置即元素3開始一一比較一共需要比較8次才能找到,同理查找5需要比較3次,查找8需要比較6次,由此可以看出對於長度爲N的線性表平局比較次數爲(1+n)/2次,用等差數列求和公式可以推出
- 例2: 將元素
3,4,5,6,7,8,9,10,11,12,13,14
存入到如下的查找二叉樹結構中查找元素10需要從根節點9開始比較由於10大於9因此去9的右子樹找,11小於10去11的左子樹找,10等於10成功找到,這過程一共比較了3次,同理查找5需要比較4次,查找8需要比價4次,由此可以看出對於擁有N個節點的排序二叉樹查任意節點的比較次數最小爲1次最大爲樹的高度
- **例3:**當排序二叉樹像下圖這樣極度不均勻的話,那麼他的查找效率幾乎與線性表相同
三、什麼是平衡二叉樹
- 結合以上例子引申出平衡二叉樹(Balanced Binary Tree),至於什麼是平衡二叉樹,先上圖
- **定義:**它是一 棵空樹或它的左右兩個子樹的高度之差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹
四、關於平衡二叉樹的性能分析
- 由平衡二叉樹的定義可以知平衡二叉樹的查詢性能比較好,且穩定
- 由於平衡二叉樹要時刻保持樹的平衡特性,在新增和刪除節點時要進行調整以保持樹的平衡特性,這是一個代價比較高的操作
五 、關於平衡二叉樹調整的幾種方式
- 過程較爲複雜,後續更新