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 下边是递归的写法,好好理解 对于递归,永远记得一点:处理好当前逻辑就好 出处:http://www.acmerblog.com/symmetric-treeleetcode-6185.html /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public boolean isSymmetric(TreeNode root) { if(root==null) return true; return isvalueSame(root.left,root.right); } private boolean isvalueSame(TreeNode left,TreeNode right){ if(left == null && right!=null) return false; if(left!=null && right==null) return false; if(left ==null && right==null) return true; return (isvalueSame(left.right,right.left) && isvalueSame(right.right,left.left) && left.val==right.val); } } 下边是迭代的写法 下边这个用到了Stack(下边的这俩方法,画个图便可以一目了然) public class Solution { public boolean isSymmetric(TreeNode root) { if(root == null) return true; Stack<TreeNode> leftStack = new Stack<TreeNode>(); Stack<TreeNode> rightStack = new Stack<TreeNode>(); leftStack.push(root.left); rightStack.push(root.right); while (leftStack.size() > 0 && rightStack.size() > 0){ TreeNode left = leftStack.pop(); TreeNode right = rightStack.pop(); if(left == null && right == null) continue; //之所以有这两句是因为在节点为空的时候,也压入了栈当中 if(left == null || right == null) return false; if(left.val == right.val) { leftStack.push(left.right); //注意在入栈的时候,跟下边的rightStack的一一对应关系 leftStack.push(left.left); rightStack.push(right.left); rightStack.push(right.right); }else{ return false; } } return true; } } 下边这个用到了队列,换汤不换药。但是比较的顺序变了。 public class Solution { public boolean isSymmetric(TreeNode root) { if(root == null) return true; Queue<TreeNode> leftqueue=new LinkedList<TreeNode>(); Queue<TreeNode> rightqueue=new LinkedList<TreeNode>(); leftqueue.add(root.left); rightqueue.add(root.right); while (leftqueue.size() > 0 && rightqueue.size() > 0){ TreeNode left = leftqueue.poll(); TreeNode right = rightqueue.poll(); if(left == null && right == null) continue; //继续while循环 if(left == null || right == null) return false; if(left.val == right.val) { leftqueue.add(left.right); leftqueue.add(left.left); rightqueue.add(right.left); rightqueue.add(right.right); }else{ return false; } } return true; } }