给出两个二叉树,请写出一个判断两个二叉树是否相等的函数。
判断两个二叉树相等的条件是:两个二叉树的结构相同,并且相同的节点上具有相同的值。
数据范围:树上的节点数满足
, 树上节点的值满足 
进阶: 空间复杂度
, 时间复杂度 )
进阶: 空间复杂度
public boolean isSameTree (TreeNode p, TreeNode q) {
if (p != null && q == null) return false;
else if (p == null && q != null) return false;
else if (p == null && q == null) return true;
else return p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}
public boolean isSameTree (TreeNode p, TreeNode q) {
// write code here
if(p == null&& q == null)
return true;
if(p == null || q == null){
return false;
}
return p.val == q.val && isSameTree(p.left,q.left)&&isSameTree(p.right ,q.right);
}
/**
*
* @param p TreeNode类
* @param q TreeNode类
* @return bool布尔型
*/
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;
}
// 两个数均不为null, 且 val值相等,直接递归比较下一层
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
} import java.util.*;
import Offer3.Solution20.TreeNode;
public class Solution22 {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p==null&&q==null)
return true;
if(p==null||q==null)
return false;
Queue<TreeNode> queue1 = new LinkedList<>();
Queue<TreeNode> queue2 = new LinkedList<>();
queue1.offer(p);
queue2.offer(q);
while(!queue1.isEmpty()&&!queue2.isEmpty()) {
TreeNode node1 = queue1.poll();
TreeNode node2 = queue2.poll();
if(node1==null&&node2==null)
continue;
if(node1==null||node2==null)
return false;
if(node1.val!=node2.val)
return false;
queue1.offer(node1.left);
queue1.offer(node1.right);
queue2.offer(node2.left);
queue2.offer(node2.right);
}
if(!queue1.isEmpty()||!queue2.isEmpty()) {
return false;
}
return true;
}
}
public 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 == null && q != null)
return false;
else
return (p.val == q.val)&&isSameTree(p.left, q.left)
&&isSameTree(p.right, q.right);
}
} public class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p==null && q==null)
return true;
if(q!=null || p==null)
return false;
return p.val==q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}
}
递归
public class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if (p == null && q == null)
return true;
if (p == null || q == null)
return false;
if (p.val != q.val)
return false;
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}
}
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSameTree(TreeNode tree1, TreeNode tree2) {
boolean result=true;
if(tree1==null&&tree2==null) {
return true;
}
if((tree1!=null&&tree2==null)||(tree1==null&&tree2!=null)) {
return false;
}
if(tree1.val!=tree2.val){
return false;
}
boolean left=isSameTree(tree1.left, tree2.left);
boolean right=isSameTree(tree1.right, tree2.right);
if(left==true&&right==true) {
result=true;
}else
result=false;
return result;
}
}
public 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 != null && q == null){
return false;
}
if(p.val == q.val){
return checkTree(p,q);
}
return false;
}
private boolean checkTree(TreeNode node1 , TreeNode node2){
if(node1 == null && node2 == null ){
return true;
}
if(node1 == null && node2 != null ){
return false;
}
if(node1 != null && node2 == null){
return false;
}
if(node1.val != node2.val){
return false;
}else{
return checkTree(node1.left,node2.left)&&checkTree(node1.right,node2.right);
}
}
} /**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p==null && q==null){
return true;
}
if(p==null&&q!=null || q==null&&p!=null){
return false;
}
if(p!=null && q!=null){
return (p.val==q.val)&&(isSameTree(p.left, q.left))&&(isSameTree(p.right, q.right));
}
return false;
}
} public class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p==null&&q==null)return true;
if(p==null||q==null)return false;
if(p.val==q.val)return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
return false;
}
} /**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
return isSameTree2(p, q);
}
public boolean isSameTree2(TreeNode tree1, TreeNode tree2) {
if (tree1 == null && tree2 == null)
return true;
if (tree1 == null || tree2 == null)
return false;
if (tree1.val != tree2.val)
return false;
return isSameTree2(tree1.left, tree2.left) && isSameTree2(tree1.right, tree2.right);
}
}