五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

LeetCode 11 3道二叉樹問題、水壺問題、壓縮字符串、只有兩個按鍵的鍵盤

2022-01-29 21:47 作者:房頂上的鋁皮水塔  | 我要投稿

最近做的六道題稍微復盤一下

二叉樹的序列化和反序列化

一道非常經(jīng)典的題目。我首先的思路是將任意一棵樹當做滿二叉樹處理,這樣的話需要先求出二叉樹深度,通過二叉樹深度初始化一個很大的數(shù)組(可能樹的結(jié)點不多,所以數(shù)組會有很多空值)。這種方式不好的地方就是時間和空間復雜度都比較高。

后來想了想,使用先序遍歷的方式將所有的結(jié)點記錄在字符串中,然后再返回,就和Leetcode官方二叉樹表示相同。

對于反序列化的話,首先需要做字符串的初始化處理。因為是先序遍歷,先序還原即可。將字符串分解成字符串數(shù)組,這里需要注意數(shù)字的表示范圍(上面也要注意,對于空節(jié)點使用null表示),以免Integer.parse出問題。

具體的代碼如下:

最大的BST子樹

這道題使用兩次dfs遍歷,第一次找出最大的BST。第二次對于這棵BST進行計數(shù)。

判斷一棵樹是否是BST:

  1. 如果左子樹和右子樹中有一顆不是BST 當前也不是

  2. 如果左子樹和右子樹都是,并且當前的節(jié)點的值大于左邊的最大值,小于右邊的最小值,則當前也是。

這樣的方法比較慢。

根據(jù)左程云講的方法,對于當前的二叉樹,需要返回這樣的幾個信息:

  1. 當前樹的最小值和最大值

  2. 當前樹(子樹)中的BST的根節(jié)點

  3. 當前樹的大小

我將這些量統(tǒng)一在一個Info類中。如果dfs返回為空,可能是因為當前樹沒有左子樹或者右子樹,也可能是因為從左子樹或右子樹中找不到BST。針對以上的可能性,我可以分類,然后給出結(jié)果。以上兩種思路的代碼如下:

二叉樹的最近公共祖先

規(guī)定dfs的返回值如果當左右節(jié)點不為空時,表示當前節(jié)點的左右子樹包含p、q,如果左子樹不為空,右子樹為空,返回左子樹的返回值。這是因為結(jié)果會線組合好,返回的值就是根節(jié)點;左子樹返回值為空,右子樹返回值為空同理; 代碼如下:

水壺問題

如果仔細分析示例1的過程,可以想出兩種辦法,第一種是使用遞歸。將所有的操作嘗試,但是這種方式不好,因為很難確定什么時候結(jié)束遞歸;第二種方式我發(fā)現(xiàn)可以將操作的過程整理為一個不定方程的形式:

ax + by = z,我參考了題解才知道這個方程的解確定可以通過貝祖定理。

貝祖定理:當z能整除ab的最大公因數(shù)時,方程有確定解。那么 代碼如下:

其他兩個題不難,都是常規(guī)問題,這里就是pass了~

LeetCode 11 3道二叉樹問題、水壺問題、壓縮字符串、只有兩個按鍵的鍵盤的評論 (共 條)

分享到微博請遵守國家法律
扶余县| 盐津县| 蒲江县| 永登县| 开化县| 蚌埠市| 马边| 金湖县| 开原市| 白城市| 合阳县| 平安县| 长宁县| 通州市| 鄢陵县| 南部县| 郓城县| 德江县| 卓尼县| 雷波县| 方城县| 乡宁县| 兴文县| 洪泽县| 理塘县| 武宣县| 七台河市| 东宁县| 涞源县| 宣威市| 淮安市| 商丘市| 昭苏县| 蚌埠市| 宁陕县| 南丰县| 淮滨县| 高密市| 海门市| 乌苏市| 兴国县|