將有序陣列轉換為二叉搜尋樹
將乙個按照公升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。
本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。
示例:給定有序陣列: [-10,-3,0,5,9],
乙個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜尋樹:
-3 90
/ \
/ /-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個部分,遞迴實現節點構建...