#101 Symmetric Tree
2015-06-02 20:00
274 查看
题目:
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.
递归方法的代码如下:
参考:http://blog.csdn.net/linhuanmars/article/details/23072829
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.
递归方法的代码如下:
/** * 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 isSymmetricCompare(root.left, root.right); } public boolean isSymmetricCompare(TreeNode l, TreeNode r){ if(l == null && r ==null) return true; if(l == null || r ==null)//这句很漂亮,涵盖了几种情况! return false; return (l.val == r.val) && isSymmetricTree(l.left, ri.right) && isSymmetricTree(l.right, r.left); } }非递归解法(用的是层序遍历):
public class Solution { public boolean isSymmetric(TreeNode root) { if(root == null) return true; if(root.left == null && root.right == null) return true; if(root.left == null || root.right == null) return false; LinkedList<TreeNode> q1 = new LinkedList<TreeNode>(); LinkedList<TreeNode> q2 = new LinkedList<TreeNode>(); q1.add(root.left);//java.util.LinkedList.add()将指定元素e追加到此列表的<u><strong>末尾</strong></u> q2.add(root.right); while(!q1.isEmpty() && !q2.isEmpty()) { TreeNode n1 = q1.poll();//java.util.LinkedList.poll()返回列表的头元素,或null--如果此列表为空.调用以后会删除该元素 TreeNode n2 = q2.poll(); if(n1.val != n2.val) return false; if(n1.left == null && n2.right != null || n1.left != null && n2.right == null) return false; if(n1.right == null && n2.left != null || n1.right != null && n2.left == null) return false; if(n1.left != null && n2.right != null) { q1.add(n1.left); q2.add(n2.right); } if(n1.right != null && n2.left != null) { q1.add(n1.right); q2.add(n2.left); } } return true; } }写在最后:开始对非递归解法的思考在使用栈来解题。懒人思维没往下多想。有机会补上吧。
参考:http://blog.csdn.net/linhuanmars/article/details/23072829
相关文章推荐
- Android开发设计模式之——单例模式
- Unity- 学习笔记笔记BroadCastMessage
- 分布式与集群的区别
- WGCNA算法研究笔记(2)
- git checkout 命令详解
- HDOJ{A}+{B}法2
- Linux下套接字详解(二)----套接字Socket
- 青蛙跳台阶问题
- A. Soldier and Bananas
- Qt_5_4_1_MSVC2013_OpenGL和opencv2.10
- 使用openssl的md5库
- Linux库函数(6.2)
- PHP回调函数--call_user_func_array
- shiro框架不需要重启动态更新权限资源
- Ubuntu 14.1 配置NFS
- Can't create table 'ecdatabase.#sql-818_bc' (errno: 150)
- ajax阻塞UI线程
- linux中lvm的缩减
- 正则表达式关于多个数字匹配的问题
- fragment 里需要activity。Android-The method findViewById(int) is undefined for the type first (Fragment)