标签:leetcode
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
Note:
Bonus points if you could solve it both recursively and iteratively.
分析: 写代码的时候感觉有点绕,第一个节点root没什么好判断的,递归也好,迭代也好,真正把树分成两半去比较都是从root.left 和 root.right 开始的, 然后就是 root.left.left & root.right.right, root.left.right & root.right.left
Iteratively:
/** * 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; } LinkedList<TreeNode> queuel = new LinkedList<>(); LinkedList<TreeNode> queuer = new LinkedList<>(); if(root.left != null){ queuel.offer(root.left); } if(root.right != null){ queuer.offer(root.right); } if(queuel.size() != queuer.size()){ return false; } while(!queuel.isEmpty() && !queuer.isEmpty()){ int sizel = queuel.size(); int sizer = queuer.size(); if(sizel != sizer){ return false; } for(int i = 0; i < sizel; i++){ TreeNode l = queuel.poll(); TreeNode r = queuer.poll(); if(l.val != r.val){ return false; } if(l.left != null){ if(r.right == null){ return false; } queuel.offer(l.left); queuer.offer(r.right); }else{ if(r.right != null){ return false; } } if(l.right != null){ if(r.left == null){ return false; } queuel.offer(l.right); queuer.offer(r.left); }else{ if(r.left != null){ return false; } } } } return true; } }
recursively:
/** * 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 isSymmetric(root.left, root.right); } private boolean isSymmetric(TreeNode root1, TreeNode root2){ if(root1 == null && root2 == null){ return true; } if(root1 == null || root2 == null){ return false; } if(root1.val != root2.val){ return false; } return isSymmetric(root1.left, root2.right) && isSymmetric(root1.right, root2.left); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:leetcode
原文地址:http://blog.csdn.net/chibaoneliuliuni/article/details/47003771