对称二叉树
此博客链接:https://www.cnblogs.com/ping2yingshi/p/13461137.html
对称二叉树
题目链接:https://leetcode-cn.com/problems/symmetric-tree/solution/
给定一个二叉树,检查它是否是镜像对称的。
示例1
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
示例2
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
题解:
思路:一开始想着用层次遍历,然后对每层数据判断头尾判断是否相等,就像判断是否是回文数一样,但是看到示例2后,就打消了这种思路,
然后又想,对每个节点判断左右孩子是否相等。这好像是只对第二层有效,当有三层及以上时,就不符合要求了。
然后又想到,前几天写过的层次遍历时,时把每层的节点放到到列表中,那比较每层列表中的数据是否时回文数不就可以了吗,好的,就时这个思路,
代码:
class Solution { public boolean isSymmetric(TreeNode root) { if(root==null) return true; // Queue <TreeNode> queue=new Linkedlist(); Queue <TreeNode> queue=new LinkedList(); queue.add(root); while(queue!=null) { List <Integer> list=new ArrayList(); int len=queue.size(); for(int i=0;i<len;i++) { TreeNode temp=queue.poll(); list.add(temp.val); if(temp.left!=null) queue.add(temp.left); if(temp.right!=null) queue.add(temp.right); } for(int i=0;i<len;i++) { if(list.get(i)!=list.get(len-1-i)) return false; } } return true; } }
上面代码运行时显示超时,我真是不知道哪里超时了,我看了题解,我感觉我写的比别人的用的时间少多了。
出来混总是要还的