一、題目
- 100. 相同的樹 - 力扣(LeetCode)
給你兩棵二叉樹的根節點?
p
?和?q
?,編寫一個函數來檢驗這兩棵樹是否相同。如果兩個樹在結構上相同,并且節點具有相同的值,則認為它們是相同的。
二、思路
- 二叉樹的題,不是遞歸就是迭代,迭代要引入輔助存儲方案,一般用遞歸就行;
- 首先的思路肯定是兩棵樹一起遞歸,而且是以相同方式遞歸,使其每次都能遞歸到相同位置的結點,此時判斷當前兩樹該位置的值是否相等;
- 還是一樣看最終狀態,遞歸到最后是兩個空結點(葉子節點的子結點),而兩個空結點也可視為相等;
- 如果不相等就返回 false ,相等就返回 true ,分別對比兩棵樹的左右子樹,當左右子樹都判斷完成且均返回 true 時方可認為相同,需要注意的是當A數有值B樹為null時,即B樹在這個位置無結點,顯然兩樹不一樣,詳見解法一;
三、解法
解法一
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if (p == null && q == null) {return true;} else if (p == null || q == null) {return false;} else if (p.val != q.val) {return false;}return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);}
}