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.
題意:
給定兩棵二叉樹,寫一個方法來確定他們是否一樣(兩棵樹的結構與樹中的每個節點都要一樣)。
題解:
對兩棵樹進行歷遍,在歷遍的過程中
- 到兩棵樹的最末節點下面(p,q都是null),則返回true
- 當左為null,右非null,此樹不相同,返回false
- 當左非null,右為null,此樹不相同,返回false
- 當兩邊的節點值不一樣,此樹不相同,返回false
- 遞歸訪問左子樹
- 遞歸訪問右子樹
最後返回結果
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) {
return helper(p, q);
}
boolean helper(TreeNode p, TreeNode q) {
//到最末節點的下面,則返回true
if(p == null && q == null)
return true;
// 左沒有,右有,此樹不相同 左有,右沒有,此樹不相同
if((p == null && q != null) || (p != null && q == null))
return false;
//兩邊的節點值不一樣,此樹不相同
if(p.val != q.val)
return false;
boolean isSame = true;
//歷遍左邊子樹
isSame &= helper(p.left, q.left);
//歷遍右邊子樹
isSame &= helper(p.right, q.right);
return isSame;
}
}