题目内容
给定一个二叉树,检查它是否是镜像对称的。请用递归和迭代两种方法解决这个问题。
示例
示例一
二叉树 [1,2,2,3,4,4,3]
是对称的。
示例二
[1,2,2,null,3,null,3]
则不是镜像对称的。
题解
本题的思路很简单,就是对树进行遍历求解。只需要注意:在遍历的过程中,要对称遍历,即在遍历左子树的左儿子时对应地要遍历右子树的右儿子即可。
代码
class Solution { public boolean isSymmetric(TreeNode root) { if(root==null) return true; return dfs(root.left,root.right); }
public boolean dfs(TreeNode p,TreeNode q){ if(p == null && q == null) return true; if(p==null || q== null || p.val != q.val) return false; return dfs(p.left,q.right) && dfs(p.right,q.left); } }
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(); 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; } }
|