LeetCode 101 Symmetric Tree
2016-04-08 15:54
330 查看
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
But the following is not:
Note:
Bonus points if you could solve it both recursively and iteratively.
confused what
read more on how binary tree is serialized on OJ.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
The above binary tree is serialized as
1.采用递归。判断左右子树是否互为镜面。
2.使用stack,stack好一点是,如果元素为null,也照样可以push、pop。
代码如下:
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? >
read more on how binary tree is serialized on OJ.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / \ 2 3 / 4 \ 5
The above binary tree is serialized as
"{1,2,3,#,#,4,#,#,5}".
1.采用递归。判断左右子树是否互为镜面。
public boolean isSymmetric(TreeNode root) { if (root == null) return true; return mirror(root.left, root.right); } public boolean mirror(TreeNode p, TreeNode q) { if (p == null && q == null) return true; if (p == null || q == null) return false; return p.val == q.val && mirror(p.left, q.right) && mirror(p.right, q.left); }
2.使用stack,stack好一点是,如果元素为null,也照样可以push、pop。
代码如下:
public boolean isSymmetric2(TreeNode root) { Stack<TreeNode> nodeStack = new Stack<TreeNode>(); if (root == null) return true; nodeStack.push(root.left); nodeStack.push(root.right); while (!nodeStack.isEmpty()) { TreeNode q = nodeStack.pop(); TreeNode p = nodeStack.pop(); if (p == null && q == null) continue; if (p == null || q == null) return false; if (p.val != q.val) return false; nodeStack.push(p.left); nodeStack.push(q.right); nodeStack.push(p.right); nodeStack.push(q.left); } return true; }
相关文章推荐
- find a list of mapping affect special talbe in informatica
- 安卓-LogUtil工具类
- 信号量与互斥锁
- jq与js 区别
- vi编辑器使用相关
- 第四 五周结对作业(照片)
- 填坑计划【2】(2016.04.08)
- 如何提升页面加载速度
- js 取多个id相同的值
- Python基础:数据类型
- HashMap源码注解 之 静态工具方法hash()、tableSizeFor()(四)
- 使用mapserver+qgis+openlayers搭建webGIS
- wordpress时间函数the_time的用法
- mysql中TINYINT的取值范围
- 字符等价关系
- cpufreq变频子系统
- 科普贴,告诉大家SGLTE、SVLTE、CSFB、SRLTE的意思
- opencv第六章 《图像变换》 知识点记忆总结
- 《MySQL必知必会学习笔记》:存储过程
- Unity3D游戏开发之数据持久化PlayerPrefs的使用