
递归
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */class Solution { public boolean isSymmetric(TreeNode root) { //递归版本 return isMirror(root,root); } public boolean isMirror(TreeNode r1,TreeNode r2) { if(r1 == null && r2 == null ) return true; if(r1 == null || r2 == null ) return false; return r1.val == r2.val && isMirror(r1.left,r2.right) && isMirror(r1.right,r2.left); }}
迭代
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */class Solution { public boolean isSymmetric(TreeNode root) { Queue<TreeNode> que = new LinkedList<>(); que.add(root); que.add(root); while(! que.isEmpty() ) { TreeNode t1 = que.poll(); TreeNode t2 = que.poll(); if(t1 == null && t2 == null ) continue; if(t1 == null || t2 == null ) return false; if(t1.val != t2.val ) return false; que.add(t1.left); que.add(t2.right); que.add(t1.right); que.add(t2.left); } return true; }}