給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。
如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。
示例 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
大多數的二叉樹題目都是用遞迴可以解的。所以當拿到二叉樹的題目的時候,我們首先就是看看能拆解成哪些子問題。
這個問題的子問題很簡單,就是左子樹,右子樹都相等的二叉樹是相同的二叉樹。
/**
* definition for a binary tree node.
* public class treenode
* }*/class solution else if (p == null || q == null)
if (p.val == q.val) else }}
那如果用非遞迴解怎麼解呢?
如果遇到二叉樹的問題,沒思路還有第二招,就是想想看是不是遍歷的變種:
我們可以用佇列,一起進行層序遍歷,同時比較左右兩顆樹:
/**
* definition for a binary tree node.
* public class treenode
* }*/class solution else if (p == null || q == null)
linkedlistqueue = new linkedlist<>();
queue.add(p);
queue.add(q);
while(!queue.isempty()) else if (left == null || right == null) else if (left.val != right.val)
// 左子樹入隊
queue.add(left.left);
queue.add(right.left);
// 右子樹入隊
queue.add(left.right);
queue.add(right.right);
}return true;}}
其實我們本質上就是要比較左右兩棵樹,也沒必要非要是佇列,其實stack也是可以的,大同小異。所以並不是你記住哪種資料結構,關鍵是你能理解後,靈活應用.
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...
leetcode100 相同的樹
給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 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...