给出两个二叉树,请写出一个判断两个二叉树是否相等的函数。
判断两个二叉树相等的条件是:两个二叉树的结构相同,并且相同的节点上具有相同的值。
数据范围:树上的节点数满足
, 树上节点的值满足 ![](https://www.nowcoder.com/equation?tex=0%20%5Cle%20val%20%5Cle%205000)
进阶: 空间复杂度
, 时间复杂度 ![](https://www.nowcoder.com/equation?tex=O(n))
进阶: 空间复杂度
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); } }