#101 Symmetric Tree
来源:互联网 发布:mfc windows 程序设计 编辑:程序博客网 时间:2024/06/03 14:11
题目:
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
0 0
- LeetCode(101)Symmetric Tree
- LeetCode 101 Symmetric Tree
- LeetCode: Symmetric Tree [101]
- [leetcode 101] Symmetric Tree
- [LeetCode 101]Symmetric Tree
- leetcode-101 Symmetric Tree
- leetcode || 101、Symmetric Tree
- #101 Symmetric Tree
- Leetcode[101]-Symmetric Tree
- leetcode[101]:Symmetric Tree
- LeetCode 101 Symmetric Tree
- leetcode 101 Symmetric Tree
- Leetcode# 101 Symmetric Tree
- leetcode 101: Symmetric Tree
- leetCode #101 Symmetric Tree
- 101Symmetric Tree
- 101Symmetric Tree
- leetcode-101-Symmetric Tree
- Android开发设计模式之——单例模式
- HDOJ{A}+{B}法2
- 4.1-2
- iOS提交后申请加急审核
- 6.2 视图UIView及视图控制器(UIViewController)
- #101 Symmetric Tree
- HDU ACM 5253 连接的管道->最小生成树(并查集)
- 【leetcode】Subsets 1&2
- Unix环境高级编程 章一:进程控制
- 菜鸟学Android笔记(十六):零散的知识点
- OPENCART之兼容多种浏览器的加入收藏夹扩展功能插件(CROSS-BROWSER BOOKMARK)
- 华为OJ(三)
- python中的内建函数(BIF)
- 数据结构与算法分析学习笔记(2)--拓扑排序