方法1:
递归,深度优先先遍历
//给你两棵二叉树的根节点 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] 内
// -10⁴ <= Node.val <= 10⁴
//
//
// Related Topics 树 深度优先搜索 广度优先搜索 二叉树 👍 1138 👎 0
//leetcode submit region begin(Prohibit modification and deletion)
import java.util.Objects;
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if (Objects.isNull(p) && Objects.isNull(q)) {
return true;
} else if (Objects.isNull(p) || Objects.isNull(q)) {
return false;
} else if (p.val != q.val) {
return false;
}else {
boolean leftans=isSameTree(p.left,q.left);
boolean rightans=isSameTree(p.right,q.right);
if(leftans&&rightans){
return true;
}else return false;
}
}
}
//leetcode submit region end(Prohibit modification and deletion)
法2:广度优先遍历
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
//法2:广度优先遍历
if (p == null && q == null) {
return true;
}
if (p == null || q == null) {
return false;
}
Queue<TreeNode> treeNodes1 = new LinkedList<>();
Queue<TreeNode> treeNodes2 = new LinkedList<>();
treeNodes1.offer(p);
treeNodes2.offer(q);
while (!treeNodes1.isEmpty() && !treeNodes2.isEmpty()) {
TreeNode n1 = treeNodes1.poll();
TreeNode n2 = treeNodes2.poll();
if (n1.val != n2.val){
return false;
}
TreeNode n1Left = n1.left;
TreeNode n1Right = n1.right;
TreeNode n2Left = n2.left;
TreeNode n2right = n2.right;
if (n1Left == null ^ n2Left == null) {
return false;
}
if (n1Right == null ^ n2right == null) {
return false;
}
if (n1Left != null) {
treeNodes1.offer(n1Left);
treeNodes2.offer(n2Left);
}
if (n1Right != null) {
treeNodes1.offer(n1Right);
treeNodes2.offer(n2right);
}
}
return treeNodes1.isEmpty()&&treeNodes2.isEmpty();
}
}