目錄
一、題目內容
二、解題思路
三、**
給定乙個單鏈表,其中的元素按公升序排序,將其轉換為高度平衡的二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。
示例:快慢指標,快指標走兩步,慢指標走一步,快指標走完,慢指標到中間,然後使慢指標下乙個為空,用慢指標構造節點,左子樹傳入head,右子樹傳入慢指標的next,遞迴反覆。給定的有序鍊錶: [-10, -3, 0, 5, 9],
乙個可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面這個高度平衡二叉搜尋樹:
0
/ \-3 9
/ /
-10 5
# definition for singly-linked list.
class listnode:
def __init__(self, val=0, next=none):
self.val = val
self.next = next
# definition for a binary tree node.
class treenode:
def __init__(self, val=0, left=none, right=none):
self.val = val
self.left = left
self.right = right
class solution:
def sortedlisttobst(self, head: listnode) -> treenode:
def dfs(head):
if head is none:
return none
if head and head.next is none:
return treenode(head.val)
slow, fast, pre = head, head, none
while fast and fast.next:
pre = slow
slow = slow.next
fast = fast.next.next
pre.next = none
node = treenode(slow.val)
node.left = dfs(head)
node.right = dfs(slow.next)
return node
return dfs(head)
if __name__ == '__main__':
nums = [-10, -3, 0, 5, 9]
a = listnode(nums[0])
cur = a
i = 1
while cur:
if i == len(nums):
break
cur.next = listnode(nums[i])
cur = cur.next
i += 1
s = solution()
ans = s.sortedlisttobst(a)
print(ans)
LeetCode109 有序鍊錶轉換二叉搜尋樹
給定乙個單鏈表,其中的元素按公升序排序,將其轉換為高度平衡的二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。示例 給定的有序鍊錶 10,3,0,5,9 乙個可能的答案是 0,3,9,10,null,5 它可以表示下面這個高度平衡二叉搜尋樹 0 ...
LeetCode 109 有序鍊錶轉換二叉搜尋樹
題目描述 給定乙個單鏈表,其中的元素按公升序排序,將其轉換為高度平衡的二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。示例 給定的有序鍊錶 10,3,0,5,9 乙個可能的答案是 0,3,9,10,null,5 它可以表示下面這個高度平衡二叉搜...
leetcode109 有序鍊錶轉換二叉搜尋樹
給定乙個單鏈表,其中的元素按公升序排序,將其轉換為高度平衡的二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。示例 給定的有序鍊錶 10,3,0,5,9 乙個可能的答案是 0,3,9,10,null,5 它可以表示下面這個高度平衡二叉搜尋樹 0 ...