在這段時間裏,發現本身的學習方式有待改進,學了好多零碎的知識點但將這些點聯繫起來究其原理的時候腦子老是模模糊糊,不是忘了這就是忘了那,沒有確切的觀點,緣由就在平時的學習中沒有多思考,沒有打破砂鍋問到底的態度,學到了什麼就是什麼,沒有究其本質,好比這段時間在複習數據結構,在複習到樹相關的知識點時,發現本身對樹的瞭解仍是不夠深刻,進而查閱了不少資料,好比
爲何二叉樹須要排序?
爲了更方便的存儲和查找(二分查找)。
爲何須要avl樹?
防止極端狀況下二叉樹退化爲鏈表的狀況,調整樹的平衡儘量下降樹的高度,提高查找性能,下降時間複雜度,將時間複雜度從O(N)降爲log(N)。
爲何有了平衡樹還須要紅黑樹?
雖然平衡樹解決了二叉查找樹退化爲近似鏈表的缺點,可以把查找時間控制在 O(logn),不過卻不是最佳的,由於平衡樹要求每一個節點的左子樹和右子樹的高度差至多等於1,這個要求實在是太嚴了,致使每次進行插入/刪除節點的時候,幾乎都會破壞平衡樹的規則,進而咱們都須要經過左旋和右旋來進行調整,使之再次成爲一顆符合要求的平衡樹。顯然,若是在那種插入、刪除很頻繁的場景中,平衡樹須要頻繁着進行調整,這會使平衡樹的性能大打折扣,爲了解決這個問題,因而有了紅黑樹.與平衡樹不一樣的是,紅黑樹在插入、刪除等操做,不會像平衡樹那樣,頻繁着破壞紅黑樹的規則,因此不須要頻繁着調整,這也是咱們爲何大多數狀況下使用紅黑樹的緣由。數據結構
當把已有的零碎知識點串聯成知識面,並曉得爲何要這樣作的時候說明纔是真正的掌握了,必定要多思考爲何,爲何,爲何。ide