101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
进阶:
你可以运用递归和迭代两种方法解决这个问题吗?
深度 :
class Solution { public boolean isSymmetric(TreeNode root) { //镜像对称的话 每个结点的两个子树de子树是对称的 return isMorio(root.left,root.right); } public boolean isMorio(TreeNode left, TreeNode right){ if(left==null&&right==null){ return true; }else if(left==null||right==null){ return false; }else if(left.val!=right.val){ return false; } return isMorio(left.left,right.right)&&isMorio(right.left,left.right); } }
广度 :
class Solution { public boolean isSymmetric(TreeNode root) { if(root==null || (root.left==null && root.right==null)) { return true; } //用队列保存节点 LinkedList<TreeNode> queue = new LinkedList<TreeNode>(); //将根节点的左右孩子放到队列中 queue.add(root.left); queue.add(root.right); while(queue.size()>0) { //从队列中取出两个节点,再比较这两个节点 TreeNode left = queue.removeFirst(); TreeNode right = queue.removeFirst(); //如果两个节点都为空就继续循环,两者有一个为空就返回false if(left==null && right==null) { continue; } if(left==null || right==null) { return false; } if(left.val!=right.val) { return false; } //将左节点的左孩子, 右节点的右孩子放入队列 queue.add(left.left); queue.add(right.right); //将左节点的右孩子,右节点的左孩子放入队列 queue.add(left.right); queue.add(right.left); } return true; } }