每日一道 LeetCode 20 相同的樹

2022-03-17 18:26:27 字數 1823 閱讀 7520

每天 3 分鐘,走上演算法的逆襲之路。

每日一道 leetcode 前文合集

github:

gitee:

給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。

如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。

示例 1:

輸入:       1         1

/ \ / \

2 3 2 3

[1,2,3], [1,2,3]

輸出: true

示例 2:

輸入:      1          1

/ \

2 2

[1,2], [1,null,2]

輸出: false

示例 3:

輸入:       1         1

/ \ / \

2 1 1 2

[1,2,1], [1,1,2]

輸出: false

今天又見到新的資料結構了,這次遇到的是樹,或者簡單的說是二叉樹。

例行慣例,第一次的見的資料結構基本上都沒啥想法,直接看答案。

只能怨自己肚子裡墨水太少,不會的太多,搞不定的只能答案走起,演算法這玩意,答案背多了再遇到題也就有想法了。

先放一段樹的結構**:

public class treenode 

public treenode(int val)

public treenode(int val, treenode left, treenode right)

}

這段**很簡單,樹上的值是 int 型別,然後有乙個左節點有乙個右節點。

樹結構介紹完畢,接下來梳理兩種遍歷樹的方案,或者說是常規操作。

解題的話提供兩種方案,一種是遞迴,一種是迴圈。

遞迴

首先極限值判斷,兩個二叉樹都為空肯定相等,如果乙個為空另乙個不為空肯定不相等。

接下來如果兩個二叉樹都不為空,那麼首先判斷它們的根節點的值是否相同,若不相同則兩個二叉樹一定不同,若相同,再分別判斷兩個二叉樹的左子樹是否相同以及右子樹是否相同,然後接著遞迴這個過程。

迴圈

首先和上面一樣,先進行極限值判斷。

使用兩個佇列分別儲存兩個二叉樹的節點。初始時將兩個二叉樹的根節點分別加入兩個佇列。每次從兩個佇列各取出乙個節點,進行操作:

結果,如果迴圈結束的時候兩個佇列同時為空,那麼這兩個二叉樹相同,如果有乙個不為空,那肯定不相同。

**:

// 迭代

public boolean issametree(treenode p, treenode q) else if (p == null || q == null) else if (p.val != q.val) else

}// 迴圈

public boolean issametree_1(treenode p, treenode q)

return queue1.isempty() && queue2.isempty();

}

結果我就不貼了,基本上答案區就這麼兩種解題方式,也沒其他能玩出花來的方式。

Leetcode 每日一道

如果不出意外每天會寫一道演算法題的部落格。如果題目簡單,就一天發布一道。如果題目比較難。我會2 3天發一道演算法的題目。今天寫的這道題目比較簡單。題目如下 解法我是用c 寫的。我的解法的大致想法是 先把需要轉換的矩陣直接轉換成一維的陣列,然後再根據要求把一維中的元素全部截為以c個元素為一組的vect...

每日一道 LeetCode 36 相交鍊錶

每天 3 分鐘,走上演算法的逆襲之路。每日一道 leetcode 前文合集 github gitee 編寫乙個程式,找到兩個單鏈表相交的起始節點。如下面的兩個鍊錶 在節點 c1 開始相交。示例 1 輸入 intersectval 8,lista 4,1,8,4,5 listb 5,0,1,8,4,5...

每日一道leetcode 最大括號深度

有效括號字串 定義 對於每個左括號,都能找到與之對應的右括號,反之亦然。詳情參見題末 有效括號字串 部分。巢狀深度 depth 定義 即有效括號字串巢狀的層數,depth a 表示有效括號字串 a 的巢狀深度。詳情參見題末 巢狀深度 部分。有效括號字串型別與對應的巢狀深度計算方法如下圖所示 給你乙個...