对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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) { if (root == null) return true; return isisSymmetricTemp(root.left,root.right); } public boolean isisSymmetricTemp(TreeNode left,TreeNode right) { if (left == null&& right == null) return true; if ((left!=null&&right == null)||(right!=null&&left == null)||left.val != right.val ) return false; return isisSymmetricTemp(left.left,right.right)&&isisSymmetricTemp(left.right,right.left); } }
思路二
迭代
class Solution { public boolean isSymmetric(TreeNode root) { if(root==null){ return true; } LinkedList<TreeNode> left = new LinkedList<>(); LinkedList<TreeNode> right = new LinkedList<>(); left.push(root.left); right.push(root.right); while(!left.isEmpty()&&!right.isEmpty()){ TreeNode leftTemp = left.peek(); TreeNode rightTemp = right.peek(); left.pop(); right.pop(); if(rightTemp == null&&leftTemp == null){ continue; } if((leftTemp!=null&&rightTemp == null)||(rightTemp!=null&&leftTemp == null)){ return false; } if(leftTemp.val != rightTemp.val){ return false; } left.push(leftTemp.left); left.push(leftTemp.right); right.push(rightTemp.right); right.push(rightTemp.left); } return true; } }