leetcode 109 有序鍊錶轉換二叉搜尋樹

2021-10-09 15:37:53 字數 1819 閱讀 2111

目錄

一、題目內容

二、解題思路

三、**

給定乙個單鏈表,其中的元素按公升序排序,將其轉換為高度平衡的二叉搜尋樹。

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

示例:

給定的有序鍊錶: [-10, -3, 0, 5, 9],

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

0

/ \-3   9

/   /

-10  5

快慢指標,快指標走兩步,慢指標走一步,快指標走完,慢指標到中間,然後使慢指標下乙個為空,用慢指標構造節點,左子樹傳入head,右子樹傳入慢指標的next,遞迴反覆。

# 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 ...