力扣100 相同的樹 題目: 給你兩棵二叉樹的根節點 p 和 q ,編寫一個函數來檢驗這兩棵樹是否相同。 如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。 示例 1: 輸入:p = [1,2,3], q = [1,2,3] 輸出:true 示例 2: 輸入:p = [1,2], q ...
力扣100 相同的樹
題目:
給你兩棵二叉樹的根節點 p 和 q ,編寫一個函數來檢驗這兩棵樹是否相同。
如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。
示例 1:
輸入:p = [1,2,3], q = [1,2,3]
輸出:true
示例 2:
輸入:p = [1,2], q = [1,null,2]
輸出:false
示例 3:
輸入:p = [1,2,1], q = [1,1,2]
輸出:false
提示:
- 兩棵樹上的節點數目都在範圍
[0, 100]
內 -104 <= Node.val <= 104
解題思路:
要判斷兩棵樹是否相同我們首先想到兩棵樹要相同首先必須是樹的結構必須相同且相同結構的節點上的值必須是相同的這時這兩棵樹才能是相同的。
代碼:
/**
* 判斷兩棵樹是否相同,要判斷兩顆樹是否相同首先如果兩棵樹的結構不同那麼肯定不是相同的
* 其次如果兩棵樹的結構相同如果相同結構節點的值不同那麼這兩棵樹也不是相同的
*/
public class BooleanSameTree {
//1.首先定義一個表示樹的節點類
public static class TreeNode{
public int value;
public TreeNode left;
public TreeNode right;
public TreeNode(int value) {
this.value = value;
}
}
//2.定義一個方法判斷這兩棵樹是否相同
public static boolean isSameTree(TreeNode p,TreeNode q){
//2.1如果一個樹的根節點為空另一個樹的根節點不為空那麼肯定是不相同的兩棵樹返回false
if(p == null ^ q == null){
return false;
}
//2.2如果兩棵樹的根節點都為空那麼返回true
if (p == null && q == null){
return true;
}
/*
2.3如果兩棵樹的根節點都不為空,首先我們要判斷兩顆樹的根節點的值是否相同
其次再遞歸的判斷兩棵樹的左節點是否相同,再遞歸判斷兩棵樹的右節點是否相同
*/
return p.value == q.value && isSameTree(p.left,q.left) && isSameTree(p.right, q.right);
}
}