数据结构与算法--力扣109题将有序双向链表转换为二叉搜索树
將有序數(shù)組轉(zhuǎn)換為二叉搜索樹
- 近一年都比較關(guān)注算法相關(guān)的知識,也刷了不少題,之前的文章中大多也是算法相關(guān)的文章,但是感覺每次遇到樹相關(guān)的題型都不能應(yīng)對自如,因此還是有必要在相關(guān)知識上下功夫,因此有此次總結(jié),以下是所有樹相關(guān)的文章
數(shù)據(jù)結(jié)構(gòu)與算法–面試必問AVL樹原理及實現(xiàn)
數(shù)據(jù)結(jié)構(gòu)與算法–二叉樹的深度問題
數(shù)據(jù)結(jié)構(gòu)與算法–二叉堆(最大堆,最小堆)實現(xiàn)及原理
數(shù)據(jù)結(jié)構(gòu)與算法–二叉查找樹轉(zhuǎn)順序排列雙向鏈表
數(shù)據(jù)結(jié)構(gòu)與算法-- 二叉樹中和為某一值的路徑
數(shù)據(jù)結(jié)構(gòu)與算法-- 二叉樹后續(xù)遍歷序列校驗
數(shù)據(jù)結(jié)構(gòu)與算法-- 廣度優(yōu)先打印二叉樹
數(shù)據(jù)結(jié)構(gòu)與算法–解決問題的方法- 二叉樹的的鏡像
數(shù)據(jù)結(jié)構(gòu)與算法–重建二叉樹
數(shù)據(jù)結(jié)構(gòu)與算法–二叉查找樹實現(xiàn)原理
數(shù)據(jù)結(jié)構(gòu)與算法–二叉樹實現(xiàn)原理
數(shù)據(jù)結(jié)構(gòu)與算法–B樹原理及實現(xiàn)
數(shù)據(jù)結(jié)構(gòu)與算法–數(shù)字在排序數(shù)組中出現(xiàn)次數(shù)
數(shù)據(jù)結(jié)構(gòu)與算法–死磕二叉樹
數(shù)據(jù)結(jié)構(gòu)與算法–二叉樹第k個大的節(jié)點
數(shù)據(jù)結(jié)構(gòu)與算法–力扣108提將有序數(shù)組轉(zhuǎn)換為二叉搜索樹
原題
- 給定一個單鏈表,其中的元素按升序排序,將其轉(zhuǎn)換為高度平衡的二叉搜索樹。本題中,一個高度平衡二叉樹是指一個二叉樹每個節(jié)點 的左右兩個子樹的高度差的絕對值不超過 1。
- 通上一篇中一樣,平衡二叉樹,高度差不超過1,其實就是AVL樹
分析
- AVL(Adelson-Velskii 和landis)樹是帶有平衡條件的二叉查找樹,這個平衡條件必須容易實現(xiàn),并且保證樹的深度必須是O(logN)。因此我們讓一棵AVL樹中每個節(jié)點的左子樹和右子樹的高度最多相差1(空樹高度定義-1)如下圖,左邊是AVL樹,右邊不是AVL樹。
- 對AVl樹的構(gòu)建實現(xiàn)以及原理在之前的文章 數(shù)據(jù)結(jié)構(gòu)與算法–面試必問AVL樹原理及實現(xiàn) 有做詳細(xì)的分析
- 算法分析:
- 同上篇中思路,因為是順序鏈表,并且要求平衡二叉樹,那么左右節(jié)點數(shù)一樣,鏈表中間節(jié)點middle就是樹的根
- head節(jié)點到middle是leftTree, middle節(jié)點到Tail是rightTree
- 同樣對于左子樹,右子樹,也依據(jù)第一步驟中,取中間節(jié)點作為根,分別得出對應(yīng)的樹結(jié)構(gòu)
- 如上,中間節(jié)點查找我們可以用快慢指針,fast每次2步,slow每次一步,得到的slow就是中間節(jié)點
- 首先我們對head~ ail(此時tail可以用null代替,最后節(jié)點就是null節(jié)點),得到中間節(jié)點slow,并且構(gòu)建根slowNode
- 接著我們分別對head ~ slow ,slow.next ~ tail分別求中間節(jié)點并且構(gòu)建對應(yīng)的樹節(jié)點,依次遞歸每個左右子樹
算法實現(xiàn)
- 實現(xiàn)中所有的鏈表節(jié)點ListNode, 樹節(jié)點BinaryNode的實現(xiàn)均出自自己的算法實現(xiàn)在之前的文章中有詳細(xì)的實現(xiàn)分析。
上一篇:數(shù)據(jù)結(jié)構(gòu)與算法–力扣108題將有序數(shù)組轉(zhuǎn)換為二叉搜索樹
總結(jié)
以上是生活随笔為你收集整理的数据结构与算法--力扣109题将有序双向链表转换为二叉搜索树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拔火罐起泡该怎么处理
- 下一篇: 数据结构与算法-- 八皇后问题(多种实现