[leetcode] 題目 109. Convert Sorted List to Binary Search Tree(go語言實現(xiàn))

題目描述:

給定一個單鏈表,其中的元素按升序排序,將其轉(zhuǎn)換為高度平衡的二叉搜索樹。

本題中,一個高度平衡二叉樹是指一個二叉樹每個節(jié)點 的左右兩個子樹的高度差的絕對值不超過 1。

示例:

給定的有序鏈表: [-10, -3, 0, 5, 9],

一個可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面這個高度平衡二叉搜索樹:

      0
     / \
   -3   9
   /   /
 -10  5

題目分析:從一個有序的鏈表中構(gòu)建二叉搜索樹
解題思路:使用三個指針slowPoint(慢指針),fastPoint(快指針),lastPoint(最后一個元素的指針),slowPoint每次移動一個元素(lastPoint和慢指正相同),fastPoint每次移動兩個元素,當fastPoint移動到鏈表尾部的時候,slowPoint指針將會處于鏈表中的中間元素,之后將lastPoint的下一元素設置為空,起到分割鏈表的作用,再對分割出的兩個鏈表進行遞歸。最后返回數(shù)的根節(jié)點。

func sortedListToBST(head *ListNode) *TreeNode {
    if head == nil {
        return nil
    }
    if head.Next == nil {
        return &TreeNode{Val:head.Val}
    }
    slowPoint := head
    fastPoint := head
    lastPoint := slowPoint
    for fastPoint.Next != nil && fastPoint.Next.Next != nil{
        lastPoint = slowPoint
        fastPoint = fastPoint.Next.Next
        slowPoint = slowPoint.Next
    }
    fastPoint = slowPoint.Next
    lastPoint.Next = nil
    currenNode := &TreeNode{Val:slowPoint.Val}
    if head != slowPoint {
        currenNode.Left = sortedListToBST(head)
    }
    currenNode.Right = sortedListToBST(fastPoint)
    return currenNode
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容