题目:
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
1 / 2 2 / \ / 3 4 4 3
But the following is not:
1 / 2 2 \ 3 3
解题:
是否对称就是要求每一层从左到右刚好等于从右到左,有两种解法一种非递归,一种递归。
非递归:
public static boolean isSymmetric(TreeNode root) { if(root==null) return true; Queue<TreeNode> left=new LinkedList<>(); Queue<TreeNode> right=new LinkedList<>(); if(root.left==null) left.offer(root.left); if(root.right==null) right.offer(root.right); while(!left.isEmpty()&&!right.isEmpty()) { TreeNode l=left.poll(); TreeNode r=right.poll(); if(l==null&&r==null) continue; if(l==null||r==null) return false; if(l.val!=r.val) return false; left.offer(l.left);left.offer(l.right); right.offer(r.right);right.offer(r.left);//倒序插入 形成镜像 } if(left.isEmpty()&&right.isEmpty()) return true; else { return false; } }
递归:
public boolean isSymmetric2(TreeNode root) { if(root==null) return true; else { return isSame(root.left, root.right); } } public boolean isSame(TreeNode left,TreeNode right) { if(left==null&& right==null) return true; if(left==null||right==null) return false; if(left.val!=right.val) return false; else { return isSame(left.left, right.right)&&isSame(left.right, right.left); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-12 22:04:24