每天 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 的巢狀深度。詳情參見題末 巢狀深度 部分。有效括號字串型別與對應的巢狀深度計算方法如下圖所示 給你乙個...