將有序陣列轉換為二叉搜尋樹

2021-10-08 05:25:52 字數 2850 閱讀 2699

將有序陣列轉換為二叉搜尋樹

將乙個按照公升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。

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

示例:給定有序陣列: [-10,-3,0,5,9],

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

0

/ \

-3 9

/ /-10 5

方法一:思路,根據中間元素切分成兩個列表,同時獲取兩個列表的中間節點root.left和root.right,迭代這向下迴圈,一直都其中乙個為空或兩個都為空時終止迴圈,這個是我本人寫的,看看就可以,寫複雜了,就不多解釋了

class

solution

:def

sortedarraytobst

(self, nums: list[

int])-

> treenode:

iflen

(nums)==0

:return

elif

len(nums)==1

:return treenode(nums[0]

) n =

len(nums)//2

tree = treenode(nums[n]

) root = tree

deftobst

(root, nums_left, nums_right)

: n_l =

len(nums_left)//2

n_r =

len(nums_right)//2

iflen

(nums_right)

>1or

len(nums_left)

>1:

root.left = treenode(nums_left[n_l]

) root.right = treenode(nums_right[n_r]

)return tobst(root.left, nums_left[

:n_l]

, nums_left[

(n_l+1)

:]), tobst(root.right, nums_right[

:n_r]

, nums_right[

(n_r+1)

:])if

len(nums_left)==1

andlen

(nums_right)==1

: root.left = treenode(nums_left[0]

) root.right = treenode(nums_right[0]

)return root.left, root.right

iflen(nums_left)==1

: root.left = treenode(nums_left[0]

)return root.left

iflen(nums_right)==1

: root.right = treenode(nums_right[0]

)return root.right

if nums_left is

none

or nums_right is

none

:return

true

tobst(root, nums[

:n], nums[

(n +1)

:])return tree

方法二:別人家的**,思路,根據索引座標進行迭代,每次迭代獲取中間元素索引,然後生成節點,直到最大索引和最小索引相同時終止,即元素遍歷完之後終止

def

sortedarraytobst

(nums)

:def

helper

(left, right)

:if left > right:

return

none

# 總是選擇中間位置左邊的數字作為根節點

mid =

(left + right)//2

root = treenode(nums[mid]

) root.left = helper(left, mid -1)

root.right = helper(mid +

1, right)

return root

return helper(0,

len(nums)-1

)

方法三:方法一的高階版,根據方法二高階,迴圈切割列表,直到列表為空終止

def

sortedarraytobst

(self, nums: list[

int])-

> treenode:

deftobst

(nums):if

len(nums)==0

:return

none

n =len(nums)//2

root = treenode(nums[n]

) root.left = tobst(nums[

:n])

root.right = tobst(nums[

(n +1)

:])return root

return tobst(nums)

將有序陣列轉換為二叉搜尋樹

示例 給定有序陣列 10,3,0,5,9 乙個可能的答案是 0,3,9,10,null,5 它可以表示下面這個高度平衡二叉搜尋樹 0 3 9 10 5大致思路,二叉搜尋樹的特性就是根節點的左子樹中的數都小於根節點,右子樹都大於根節點。這就想到了用二分法,找到中間的數,則這個數左邊的數比它小,右邊數比...

將有序陣列轉換為二叉搜尋樹

將乙個按照公升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。示例 給定有序陣列 10,3,0,5,9 乙個可能的答案是 0,3,9,10,null,5 它可以表示下面這個高度平衡二叉搜尋樹 0 3 9 10...

將有序陣列轉換為二叉搜尋樹

題目 將有序陣列轉換為二叉搜尋樹 力扣 108 將乙個按照公升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。分析二叉樹中序遍歷的逆序。找到陣列的中間位置,作為根節點,這時將陣列分為2個部分,遞迴實現節點構建...