Symmetric Tree

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.

confused what "{1,#,2,3}" means?

思想:递推

java代码:

  1. public boolean isSymmetric(TreeNode left,TreeNode right) {
  2. if(left==null && right==null) return true;
  3. if(left == null || right == null) return false;
  4. if(left.val != right.val) return false;
  5. boolean flag = isSymmetric(left.left,right.right) && isSymmetric(left.right,right.left);
  6. return flag;
  7. }
  8. public boolean isSymmetric(TreeNode root) {
  9. if(root==null) return true;
  10. if(root.left==null && root.right==null) return true;
  11. return isSymmetric(root.left,root.right);
  12. }

思想二:迭代

注意事项:java 中Queue是一个接口,需要用LinkedList来初始化。提供来offer和poll来添加和移除数据,如果溢出,返回false或者不存在,则返回null。相对于add和remove安全一些,或者说add和remove会首先根据offer和poll的结果来判断是否存在异常。

Queue中的peek返回头节点,如果不存在则返回null。

  1. public boolean isSymmetric(TreeNode root) {
  2. if(root==null) return true;
  3. if(root.left==null && root.right==null) return true;
  4. Queue<TreeNode> q = new LinkedList<TreeNode>();
  5. Queue<TreeNode> p = new LinkedList<TreeNode>();
  6. if(root.left!=null) q.offer(root.left);
  7. if(root.right!=null) p.offer(root.right);
  8. while(q.peek() != null || p.peek() != null) {
  9. TreeNode left = q.poll();
  10. TreeNode right = p.poll();
  11. if(left==null || right==null) return false;
  12. if(left.val == right.val) {
  13. if(left.left!=null && right.right!=null) {
  14. q.offer(left.left);
  15. p.offer(right.right);
  16. } else if(left.left!=null || right.right!=null) {
  17. return false;
  18. }
  19. if(left.right!=null && right.left!=null) {
  20. q.offer(left.right);
  21. p.offer(right.left);
  22. } else if(left.right!=null || right.left!=null) {
  23. return false;
  24. }
  25. } else {
  26. return false;
  27. }
  28. }
  29. return true;
  30. }
posted @ 2014-07-09 23:51  purejade  阅读(94)  评论(0)    收藏  举报