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