leetcode–demo101对称二叉树
遇到这中问题一般还是使用常规的两种方法:bfs,dfs
如何判断二叉树是否对称主要分为两步:第一就是判断左子树与右子树的结构是否相同,第二就是对应节点的值是否一样。
class Solution {
public boolean isSymmetric(TreeNode root) {
return check(root.left, root.right);
}
public boolean check(TreeNode p, TreeNode q) {
if (p == null && q == null) {
return true;
}
if (p == null || q == null) {
return false;
}
return p.val == q.val && check(p.left, q.right) && check(q.left, p.right);
}
}
class Solution1 {
public boolean isSymmetric(TreeNode root) {
return check(root,root);
}
//参数p,q可以看成两个指针
public boolean check(TreeNode p,TreeNode q){
Queue<TreeNode> queue=new LinkedList<>();
//将这两个节点添加到队列中
queue.offer(p);
queue.offer(q);
while (!queue.isEmpty()){
p=queue.poll();
q=queue.poll();
if (p==null&&q==null){
continue;
}
if ((p==null||q==null)||(p.val!=q.val)){
return false;
}
//将p的左节点和q的右节点入队
queue.offer(p.left);
queue.offer(q.right);
//将q的左节点和p的右节点入队
queue.offer(p.right);
queue.offer(q.left);
}
return true;
}
}