Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
題意:給定兩顆二叉樹,寫一個方法來判斷它們是否相同
題解:
遞歸地歷遍左右子樹,遇到不同的就返回false,樹不同有以下三種情況:
- 左有節點,右沒有節點
- 左沒有節點,右有節點
- 兩邊的節點值不一樣
遇到上面三種情況則直接返回false,而歷遍到最末節點以下(兩個節點都為null),則返回true,表示從上面到此最末節點都是一樣的
package LeetCode.Easy;
import LeetCode.Dependencies.TreeNode;
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class SameTree {
public boolean isSameTree(TreeNode p, TreeNode q) {
//到最末節點的下面,則返回true
if(p == null && q == null)
return true;
//左有,右沒有,此樹不相同
if(p == null && q != null)
return false;
//左沒有,右有,此樹不相同
if(p != null && q == null)
return false;
//兩邊的節點值不一樣,此樹不相同
if(p.val != q.val)
return false;
//歷遍右邊子樹
boolean isRightSame = isSameTree(p.right, q.right);
if(isRightSame == false)
return false;
//歷遍左邊子樹
boolean isLeftSame = isSameTree(p.left, q.left);
if(isLeftSame == false)
return false;
//若都經過以上的關卡都沒有返回false,這表示兩棵樹都是一樣的
return true;
}
}