Leetcode刷題之深度優先

2021-10-25 05:43:55 字數 952 閱讀 8555

難度簡單623收藏分享切換為英文接收動態反饋

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

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

示例:

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

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

0/ \

-3 9

/ /

-10 5

/**

* definition for a binary tree node.

* public class treenode

* }*/

總是選擇中間位置左邊的數字作為根節點,這樣分給左右子樹的數字個數相同或只相差 11,可以使得樹保持平衡。如果陣列長度是奇數,則根節點的選擇是唯一的,如果陣列長度是偶數,則可以選擇中間位置左邊的數字作為根節點或者選擇中間位置右邊的數字作為根節點,選擇不同的數字作為根節點則建立的平衡二叉搜尋樹也是不同的。

code:

class solution 

return helper(nums, 0, nums.length - 1);

}private treenode helper(int nums, int left, int right)

int mid = (left + right) / 2;

treenode root = new treenode(nums[mid]);

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

root.right = helper(nums, mid + 1, right);

return root;

}}

leetcode 刷題之深度優先搜尋

對於一般的dfs問題,其相鄰的邊代表了不同的搜尋方向,有向圖一般不會陷入重複搜尋的死迴圈,因此不需要標記已訪問節點的seen矩陣,比如二叉樹問題,797.所有可能的路徑 而無向圖則需要定義的乙個標記已訪問節點的seen矩陣。dfs 一般可以用來確定連通域 島嶼等 bfs可以用來查詢最短路徑長度等。9...

Leetcode刷題之括號

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...

leetcode刷題之堆

今天終於開啟的第二個專題的刷題之旅堆,不過第乙個專題棧還有乙個小問題沒解決就是利用遞減棧去解決接雨水的問題,雖然那道題我用動態規劃的問題解決出來了,我記得看到過一道面試題,問棧和堆有什麼區別。通過搜尋網上的資料總結如下。棧 stack 由系統分配記憶體,速度較快,但是自己無法掌握。堆 一般用兩種方法...