#leetcode#Symmetric Tree
来源:互联网 发布:tomcat 1099端口被占用 编辑:程序博客网 时间:2024/05/16 17:15
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.
分析: 写代码的时候感觉有点绕,第一个节点root没什么好判断的,递归也好,迭代也好,真正把树分成两半去比较都是从root.left 和 root.right 开始的, 然后就是 root.left.left & root.right.right, root.left.right & root.right.left
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; } LinkedList<TreeNode> queuel = new LinkedList<>(); LinkedList<TreeNode> queuer = new LinkedList<>(); if(root.left != null){ queuel.offer(root.left); } if(root.right != null){ queuer.offer(root.right); } if(queuel.size() != queuer.size()){ return false; } while(!queuel.isEmpty() && !queuer.isEmpty()){ int sizel = queuel.size(); int sizer = queuer.size(); if(sizel != sizer){ return false; } for(int i = 0; i < sizel; i++){ TreeNode l = queuel.poll(); TreeNode r = queuer.poll(); if(l.val != r.val){ return false; } if(l.left != null){ if(r.right == null){ return false; } queuel.offer(l.left); queuer.offer(r.right); }else{ if(r.right != null){ return false; } } if(l.right != null){ if(r.left == null){ return false; } queuel.offer(l.right); queuer.offer(r.left); }else{ if(r.left != null){ return false; } } } } return true; }}
recursively:
/** * 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 isSymmetric(root.left, root.right); } private boolean isSymmetric(TreeNode root1, TreeNode root2){ if(root1 == null && root2 == null){ return true; } if(root1 == null || root2 == null){ return false; } if(root1.val != root2.val){ return false; } return isSymmetric(root1.left, root2.right) && isSymmetric(root1.right, root2.left); }}
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
- 程序运行时间
- Hibernate3学习笔记(11)——Hibernate事务处理
- Java集合框架(List, Set, Map, Collections)
- require.js 详解
- 嵌入式系统HAL原理与BSP的实现方法
- #leetcode#Symmetric Tree
- 进程终止
- Edit控件如何换行
- JavaScript之正则表达式
- 异或运用+尼姆博奕+杭电1849
- Android ViewTreeObserver的常用技巧
- EJB之JPA
- HDU - 1874 - 畅通工程续(Floyd)
- 浅谈单页面网站需要注意哪些事项