这三道题有很多相似之处,这里我们直接贴代码,整理思路过程
#比较二叉树是否相同
- 两棵树都为空,相同
- 有一颗为空,不同
- 都不空,递归去分别看左子树与右子树
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
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);
}
}
#判断一颗二叉树是否对称
- 根节点为空,该二叉树不存在,返回true
- 左右子树不存在,返回true
- 一支子树存在,返回false
- 对称的话左子树的左==右子树的右,左子树的右==右子树的左,所以递归分别去看
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root==null){
return true;
}
return helper(root.left,root.right);