【LeetCode】101. Symmetric Tree 解题报告
来源:互联网 发布:jordan淘宝官方旗舰店 编辑:程序博客网 时间:2024/05/17 07:26
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51541984
Subject
出处:https://leetcode.com/problems/symmetric-tree/
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
Explain
判断一颗二叉树是否 镜像对称。
Solution
solution 1
判断是否是镜像对称,重要的就是判断对应位置的两个结点的值是否相等。
方法一使用双端队列来实现。
/** * 双端队列 <br /> * DFS <br /> * 3ms <br /> * beats 6.29% of java submissions * * @param root * @return */ public boolean isSymmetric(TreeNode root) { if (root == null) { return true; } Deque<TreeNode> deque = new LinkedList<TreeNode>(); deque.addFirst(root.left); deque.addLast(root.right); TreeNode preNode = null; TreeNode postNode = null; while (!deque.isEmpty()) { preNode = deque.pollFirst(); postNode = deque.pollLast(); if (preNode == null && postNode == null) { continue; } if (preNode == null || postNode == null) { return false; } if (preNode.val != postNode.val) { return false; } else { deque.addFirst(preNode.right); deque.addFirst(preNode.left); deque.addLast(postNode.left); deque.addLast(postNode.right); } } return true; }
每次都是从队头和队尾各poll出结点,然后进行比较。
如果条件满足,将队头结点的右结点和左结点入队头
将队尾结点的左结点和右结点入队尾
直到队列为空
solution 2
递归方式
/** * 递归方式 <br /> * 1ms <br /> * * @param root * @return */ public boolean isSysmmetric2(TreeNode root) { if (root == null) { return true; } return checkNodes(root.left, root.right); } public boolean checkNodes(TreeNode node1, TreeNode node2) { if (node1 == null && node2 == null) { return true; } if (node1 == null || node2 == null) { return false; } if (node1.val != node2.val) { return false; } else { return checkNodes(node1.left, node2.right) && checkNodes(node1.right, node2.left); } }
该方法的效率较高~
1ms。
solution 3
考虑到之前有做过一个【Same Tree】 的题目和 【Reverse Binary Tree】 的题目。
所以想到,将当前二叉树“反转”,然后在判断这两个树是否一样即可。
/** * 拷贝一颗二叉树,reverse。或者拷贝的时候直接反转。 <br /> * 然后在使用Same Tree的方法判断这两个树是否一样。 <br /> * 1ms * * @param root * @return */ public boolean isSysmmetric3(TreeNode root) { if (root == null) { return true; } TreeNode newRootNode = copyNode(root); SameTree sameTree = new SameTree(); return sameTree.isSameTree(root, newRootNode); } /** * 左右对换结点拷贝二叉树 * * @param node * @return */ private TreeNode copyNode(TreeNode node) { if (node == null) { return null; } TreeNode treeNode = new TreeNode(node.val); treeNode.left = copyNode(node.right); treeNode.right = copyNode(node.left); return treeNode; }
传送门
【Same Tree】
【Reverse Binary Tree】
bingo~~
1 0
- [leetcode] 101. Symmetric Tree 解题报告
- 【LeetCode】101. Symmetric Tree 解题报告
- LeetCode解题报告 101. Symmetric Tree [easy]
- [Leetcode] 101. Symmetric Tree 解题报告
- [leetcode]101. Symmetric Tree@Java解题报告
- [LeetCode] Symmetric Tree 解题报告
- 【LeetCode】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
- LeetCode --- 101. Symmetric Tree
- [leetcode] 101.Symmetric Tree
- LeetCode : 101. Symmetric Tree
- [leetcode]101.Symmetric Tree
- 基于Ubuntu14.04+ROS indigo环境LSD-SLAM的数据集测试成功
- 290. Word Pattern(技巧:记录当前位置来判断两个字符串是否符合)
- 设计模式 —— 迭代器模式(Iterator Pattern)
- 常用的Linux命令
- 一往无前,请记住最初的梦想。
- 【LeetCode】101. Symmetric Tree 解题报告
- CSS中link与import的区别
- dp-挑战程序设计竞赛-状态的选择 多重部分和 LIS
- Struts2上课笔记
- ASCII、Unicode、GBK和UTF-8字符编码
- 我的第六次上机作业
- Android获取view高度
- a+b problem 2
- maven搭建ssm分模块框架+ehcache (myeclipse版) (五)