101. Symmetric Tree

Easy

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

    1
/ \
2 2
/ \ / \
3 4 4 3

But the following [1,2,2,null,3,null,3] is not:

    1
/ \
2 2
\ \
3 3

Note:
Bonus points if you could solve it both recursively and iteratively.

package leetcode.easy;

/**
* Definition for a binary tree node. public class TreeNode { int val; TreeNode
* left; TreeNode right; TreeNode(int x) { val = x; } }
*/
public class SymmetricTree {
public boolean isSymmetric1(TreeNode root) {
return isMirror(root, root);
} public boolean isMirror(TreeNode t1, TreeNode t2) {
if (t1 == null && t2 == null) {
return true;
}
if (t1 == null || t2 == null) {
return false;
}
return (t1.val == t2.val) && isMirror(t1.right, t2.left) && isMirror(t1.left, t2.right);
} public boolean isSymmetric2(TreeNode root) {
java.util.Queue<TreeNode> q = new java.util.LinkedList<>();
q.add(root);
q.add(root);
while (!q.isEmpty()) {
TreeNode t1 = q.poll();
TreeNode t2 = q.poll();
if (t1 == null && t2 == null) {
continue;
}
if (t1 == null || t2 == null) {
return false;
}
if (t1.val != t2.val) {
return false;
}
q.add(t1.left);
q.add(t2.right);
q.add(t1.right);
q.add(t2.left);
}
return true;
} @org.junit.Test
public void test1() {
TreeNode tn11 = new TreeNode(1);
TreeNode tn21 = new TreeNode(2);
TreeNode tn22 = new TreeNode(2);
TreeNode tn31 = new TreeNode(3);
TreeNode tn32 = new TreeNode(4);
TreeNode tn33 = new TreeNode(4);
TreeNode tn34 = new TreeNode(3);
tn11.left = tn21;
tn11.right = tn22;
tn21.left = tn31;
tn21.right = tn32;
tn22.left = tn33;
tn22.right = tn34;
tn31.left = null;
tn31.right = null;
tn32.left = null;
tn32.right = null;
tn33.left = null;
tn33.right = null;
tn34.left = null;
tn34.right = null;
System.out.println(isSymmetric1(tn11));
System.out.println(isSymmetric2(tn11));
} @org.junit.Test
public void test2() {
TreeNode tn11 = new TreeNode(1);
TreeNode tn21 = new TreeNode(2);
TreeNode tn22 = new TreeNode(2);
TreeNode tn32 = new TreeNode(4);
TreeNode tn34 = new TreeNode(3);
tn11.left = tn21;
tn11.right = tn22;
tn21.left = null;
tn21.right = tn32;
tn22.left = null;
tn22.right = tn34;
tn32.left = null;
tn32.right = null;
tn34.left = null;
tn34.right = null;
System.out.println(isSymmetric1(tn11));
System.out.println(isSymmetric2(tn11));
}
}

最新文章

  1. 学习笔记:Maven构造版本号的方法解决浏览器缓存问题
  2. 11 Clever Methods of Overfitting and how to avoid them
  3. java se doc
  4. Html.text(转载)
  5. 【原创】纯OO:从设计到编码写一个FlappyBird (一)
  6. 每天4亿行SQLite订单大数据测试(源码)
  7. 广告中的AdNetwork、AdExchange、DSP、SSP、RTB和DMP是什么?
  8. 1016. Phone Bills (25) -vector排序(sort函数)
  9. MPEG-7 视觉描述符
  10. js 对时间进行判断 现在的时间是否在后台给的开始时间 和 结束时间 内 (时间格式为:2018-09-03 09:20:30)
  11. python django基础一web框架的本质
  12. 【转】Java生成图片验证码
  13. HTML 基础 块级元素与行内元素
  14. 9 random模块
  15. JAVAEE——Lucene基础:什么是全文检索、Lucene实现全文检索的流程、配置开发环境、索引库创建与管理
  16. 关于BroadCastReceiver安全性的思考
  17. Spark的Java API例子详解
  18. 撩课-Python-每天5道面试题-第6天
  19. assert 函数
  20. SPOJ - TTM 主席树

热门文章

  1. redis 与 序列化
  2. aiohttp 支持异步的网络请求模块
  3. Centos 拒绝ssh远程暴力破解方法
  4. python线程池及其原理和使用
  5. CSS3限,2行3行等文字在块元素显示的文字内容超出显示省略号
  6. ES WIndows 安装 ES与ES-head
  7. Elasticsearch环境搭建和介绍(Windows)
  8. jQuery相关方法1
  9. loj 2011
  10. luogu 1369