此博客链接:https://www.cnblogs.com/ping2yingshi/p/14111516.html
对称二叉树(47min)
题目链接:https://leetcode-cn.com/problems/symmetric-tree/submissions/
题目
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/
2 2
/ /
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/
2 2
3 3
题解
思路1:递归,判断根节点的左子树和右子树是否相等,然后比较左子树的左子树和右子树的右子树是否相等,如果相等,则返回true,否则返回false。
思路2:利用队列,把根的左子树和右子树先入队列,然后判断左子树的左子树和右子树的右子树是否相等,如果相等,则返回true,否则返回false。
代码1
class Solution { public boolean isSymmetric(TreeNode root) { if(root==null) return true; return Ispanduan(root.left,root.right); } public boolean Ispanduan(TreeNode left,TreeNode right){ if(left==null&&right==null) return true; if(left==null||right==null||left.val!=right.val){ return false; } return Ispanduan(left.left,right.right)&&Ispanduan(left.right,right.left); } }
结果1
代码2
class Solution { public boolean isSymmetric(TreeNode root) { if(root==null) return true; // Queue <TreeNode> queue=new Linkedlist(); Queue <TreeNode> queue=new LinkedList(); queue.add(root.left); queue.add(root.right); while(!queue.isEmpty()) { TreeNode left=queue.poll(); TreeNode right=queue.poll(); if(left==null&&right==null) continue; if(left==null||right==null||left.val!=right.val) return false; queue.add(left.left); queue.add(right.right); queue.add(left.right); queue.add(right.left); } return true; } }
结果2
耗时:
1.在递归代码,需要同时满足左子树的左子树和右子树的右子树,左子树的右子树和右子树的左子树需要同时相等,才能判断是镜面对称。
2.在写完判断时,忘记加大括号,一直没有找到报错的原因。