給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。
如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。
示例 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
1.大多數的二叉樹題目都是用遞迴可以解的。
所以當拿到二叉樹的題目的時候,我們首先就是看看能拆解成哪些子問題。
這個問題的子問題很簡單,就是左子樹,右子樹都相等的二叉樹是相同的二叉樹。注意出口條件。
// 遞迴
public boolean issametree(treenode p, treenode q)
if (p == null || q == null)
if (p.val != q.val)
return issametree(p.left, q.left) && issametree(p.right, q.right);
}
2.用非遞迴解怎麼解呢?
如果遇到二叉樹的問題,沒思路還有第二招,就是想想看是不是遍歷的變種:
我們可以用佇列,一起進行層序遍歷,同時比較左右兩顆樹:
// 非遞迴 兩棵樹層序比較
public boolean issametree2(treenode p, treenode q)
if (p == null || q == null)
queuequeue = new linkedlist<>();
queue.add(p);
queue.add(q);
while (!queue.isempty()) else if (first == null || second == null) else if (first.val != second.val)
// 左子樹入隊
queue.add(first.left);
queue.add(second.left);
// 右子樹入隊
queue.add(first.right);
queue.add(second.right);
} return true;
}
LeetCode 100 相同的樹
題目描述 給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 輸入 1 1 2 3 2 3 1,2,3 1,2,3 輸出 true輸入 1 1 2 2 1,2 1,null,2 輸出 false輸入 1 1 2 1 1 2 1,2,...
LeetCode 100 相同的樹
給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 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...
Leetcode 100 相同的樹
給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 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...