LeetCode 51 Symmetric Tree
来源:互联网 发布:stata mac 编辑:程序博客网 时间:2024/06/05 04:53
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 3But the following is not:
1 / \ 2 2 \ \ 3 3NOTE:
Bonus points if you could solve it both recursively and iteratively.
分析:
递归解法就是分别判断左右子树是否对称,即左子树的左子树和右子树的右子树应该是对称的,左子树的右子树和右子树的左子树应该是对称的。
/** * 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; return isSymmetric(root.left, root.right); } private boolean isSymmetric(TreeNode left, TreeNode right){ if(left==null) return right==null; if(right==null) return false; if(left.val != right.val) return false; if(!isSymmetric(left.left, right.right)) return false; if(!isSymmetric(left.right, right.left)) return false; return true; }}迭代解法
就是分别对左右子树进行层序遍历,对于每一层,左子树从左向右遍历,右子树从右向左遍历,保证左右队列里每一个元素都相等,则是对称的。
/** * 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> left = new LinkedList<TreeNode>(); Queue<TreeNode> right = new LinkedList<TreeNode>(); left.add(root.left); right.add(root.right); while(left.size()>0 && right.size()>0){ TreeNode l = left.remove(); TreeNode r = right.remove(); if((l == null && r != null) || (l != null && r == null)) return false; if(l != null && r != null){ if(l.val != r.val) return false; left.add(l.left); left.add(l.right); right.add(r.right); right.add(r.left); } } return true; }}
0 0
- LeetCode 51 Symmetric Tree
- LeetCode(51) Symmetric Tree
- 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
- dedecms 标签用法
- Sleep和Wait的区别
- 初创公司的创始人该拿多少薪水?
- Animations(通过XML 文件控制)-- MarsChen Android 开发教程笔记
- Express框架中如何引用ejs模板引擎
- LeetCode 51 Symmetric Tree
- 树的基本操作
- C++临时对象销毁时间
- hadoop学习【12】——hadoop杂谈之我的理解
- linux 设置网络API --- 开/关网卡、设置/获取Mac地址
- 公顷、平方米、亩
- session API
- String类的compareTo()和compareToIgnoreCase()
- 自省