[LeetCode] - Symmetric Tree
来源:互联网 发布:盗号软件万能钥匙 编辑:程序博客网 时间:2024/06/04 19:45
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.
1. 以下是常规的recursive解法,没啥可说的,挨着个儿检查就是了。
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public boolean isSymmetric(TreeNode leftSub, TreeNode rightSub) { if(leftSub==null && rightSub==null) return true; if(leftSub==null && rightSub!=null) return false; if(leftSub!=null && rightSub==null) return false; if(leftSub.val!=rightSub.val) return false; return isSymmetric(leftSub.left, rightSub.right) && isSymmetric(leftSub.right, rightSub.left); } public boolean isSymmetric(TreeNode root) { if(root==null) return true; return isSymmetric(root.left, root.right); }}
2. 以下是iterative的解法。其实也没啥好说的,就是用level order traversal的方式来检查,BFS算法。如果碰到null的情况,加一个特殊值到list里面就可以了。这个有点儿像binary tree的serialization时用到的思想。
/** * Definition for binary tree * 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; Queue<TreeNode> frontier = new LinkedList<TreeNode>(); frontier.add(root); while(!frontier.isEmpty()) { Queue<TreeNode> next = new LinkedList<TreeNode>(); Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); boolean flag = false; while(!frontier.isEmpty()) { TreeNode temp = frontier.poll(); if(temp != null) { stack1.push(temp.val); if(temp.left != null) { next.add(temp.left); if(!flag) flag=true; } else next.add(null); if(temp.right != null) { next.add(temp.right); if(!flag) flag=true; } else next.add(null); } else stack1.push(-100); } int size=stack1.size(), i=0; while(i < size/2) { stack2.push(stack1.pop()); i++; } if(size%2!=0 && !stack1.isEmpty()) stack1.pop(); while(!stack1.isEmpty()) { if(stack1.pop()!=stack2.pop()) return false; } if(!flag) frontier.clear(); else frontier=next; } return true; }}
0 0
- Leetcode - Tree - Symmetric Tree
- Leetcode - Tree - Symmetric Tree
- LeetCode[Tree]: Symmetric Tree
- [leetcode][tree] Symmetric Tree
- LeetCode: Symmetric Tree
- [Leetcode] Symmetric Tree
- LeetCode : Symmetric Tree
- leetcode 13:symmetric tree
- [LeetCode] Symmetric Tree - Recursively
- [LeetCode] Symmetric Tree - Iteratively
- [LeetCode] Symmetric Tree
- [LeetCode]Symmetric Tree
- Leetcode:Symmetric Tree
- [Leetcode]Symmetric Tree
- Leetcode: Symmetric Tree
- [leetcode]Symmetric Tree
- LeetCode-Symmetric Tree
- [leetcode] Symmetric Tree
- ImageView.scaleType属性意义
- android自定义animation
- 【Hibernate学习笔记】hibernate入门
- 解决Adb Server ACK error的问题(端口占用)
- centos缺少共享库:libstdc++.so.6
- [LeetCode] - Symmetric Tree
- linux下的SVN server的POST-COMMIT钩子自动部署代码
- google新版本android系统正式推出
- C#热图生成(三)——with Silverlight改进热图显示
- LearnVSXNow! #11- 测试package
- 安装APC为Magento提速
- sms AT指令返回错误代码: CMS errors & CME errors 的区别!
- LearnVSXNow! #12- “VsxLibrary” 和“HowToPackage”
- uva254 - Towers of Hanoi 递归