每日程式設計(十) leetcode刷題

2021-09-10 06:59:08 字數 1613 閱讀 2606

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

題目描述:

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

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

示例:

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

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

0/ \

-3 9

/ /

-10 5

分析:利用二分法建樹

上**:

/*** definition for a binary tree node.

* type treenode struct

*/func sortedarraytobst(nums int) *treenode

return buildtree(nums,0,len(nums)-1)

}func buildtree(nums int,l int,r int) *treenode

if l==r

return p

}mid:=(l+r)/2

root:=&treenode

root.left=buildtree(nums,l,mid-1)

root.right=buildtree(nums,mid+1,r)

return root

}題目:有序鍊錶轉換二叉搜尋樹

題目描述:

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

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

示例:

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

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

0/ \

-3 9

/ /

-10 5

分析:跟上個題目類似

上**:

/*** definition for singly-linked list.

* type listnode struct

*//**

* definition for a binary tree node.

* type treenode struct

*/func sortedlisttobst(head *listnode) *treenode

return buildtree(head,nil) 

}func buildtree(head *listnode,tail *listnode) *treenode

fast :=head

slow:=head

for fast!=tail && fast.next!=tail

root:=&treenode

root.left=buildtree(head,slow)

root.right=buildtree(slow.next,tail)

return root

}

每日程式設計(五) leetcode刷題

題目 最後乙個單詞的長度 描述 給定乙個僅包含大小寫字母和空格 的字串,返回其最後乙個單詞的長度。如果不存在最後乙個單詞,請返回 0 說明 乙個單詞是指由字母組成,但不包含任何空格的字串。示例 輸入 hello world 輸出 5分析 比較簡單了,很明顯字串的分割,去最後乙個字串,計算長度即可,但...

每日程式設計(十一) leetcode刷題

題目 平衡二叉樹 題目描述 給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回true。分析 沒什麼可說的,雙遞迴,先...

每日程式設計(十二) leetcode刷題

題目表述 給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 1返回 true,因為存在目標和為 22 的根節點到葉子節點的路...