- 浏览: 19030 次
- 性别:
- 来自: 北京
文章分类
最新评论
题目描述
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
解题思路
(1)
本题想到的解题思路是树的层序遍历,然后比较同一层上的元素是否是对称的。
(2)
在本题梳理思路时,一定要注意同一层上的元素个数不要想当然的认为是2的指数倍,而是上一层中非空元素个数的两倍。做题时在这一点上浪费了好多时间。。
相关知识
(1)Java中的队列
在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。
Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用
element()或者peek()方法。
值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。
(2)lable的用法
在程序需要跳出时,注意使用lable方式跳出。
(2)Java中的指数函数
Math.pow(double m, double n) 是求m的n次方
自己的代码
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
解题思路
(1)
本题想到的解题思路是树的层序遍历,然后比较同一层上的元素是否是对称的。
(2)
在本题梳理思路时,一定要注意同一层上的元素个数不要想当然的认为是2的指数倍,而是上一层中非空元素个数的两倍。做题时在这一点上浪费了好多时间。。
相关知识
(1)Java中的队列
在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。
Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用
element()或者peek()方法。
值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。
(2)lable的用法
在程序需要跳出时,注意使用lable方式跳出。
(2)Java中的指数函数
Math.pow(double m, double n) 是求m的n次方
自己的代码
package leetcode; import java.util.LinkedList; import java.util.Queue; import java.util.Vector; class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public class SymmetricTree { public boolean isSymmetric(TreeNode root) { //如果为空树 if(root == null) return true; Vector<Integer> v = new Vector<Integer>(); v.add(root.val); Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); while(!queue.isEmpty()){ TreeNode headNode = queue.poll(); if(headNode.left != null){ queue.offer(headNode.left); v.add(headNode.left.val); } else v.add(-1); if(headNode.right != null){ queue.offer(headNode.right); v.add(headNode.right.val); } else v.add(-1); } //System.out.println(v.toString()); //当树只有一个元素时 if(v.size() == 1)return true; boolean isTrue = true; int sum = 1; int below0 = 1; outer: while(below0 != 0){ int size = 2*below0; below0 = 0; for(int i = 0; i < size/2; i++){ if(v.get(sum+i) != -1) below0++; if(v.get(sum+i) != v.get(sum+size-1-i)){ isTrue = false; break outer; } } below0 *= 2; sum += size; } return isTrue; } public static void main(String[] args) { TreeNode node1 = new TreeNode(1); TreeNode node2 = new TreeNode(2); TreeNode node3 = new TreeNode(2); TreeNode node4 = new TreeNode(3); TreeNode node5 = new TreeNode(4); TreeNode node6 = new TreeNode(4); TreeNode node7 = new TreeNode(3); TreeNode node8 = new TreeNode(5); TreeNode node9 = new TreeNode(5); TreeNode node10 = new TreeNode(6); TreeNode node11 = new TreeNode(6); /*node1.left = node2; node1.right = node3; node2.left = node4; node2.right = node5; node3.left = node6; node3.right = node7;*/ /*node1.left = node2; node1.right = node3; node2.right = node4; node3.right = node7;*/ /*node1.left = node2; node1.right = node4; node4.left = node5; node5.right = node8;*/ node4.left = node5; node4.right = node6; node5.left = node8; node6.right = node9; node8.left = node10; node9.right = node11; SymmetricTree st = new SymmetricTree(); System.out.println(st.isSymmetric(node4)); } }
发表评论
-
Java中String与StringBuffer的区别
2014-10-29 21:07 297String和StringBuffer的区别,网上资料可以说 ... -
String to Integer (atoi)
2014-10-29 17:13 398题目描述 Implement atoi to convert ... -
Implement strStr()
2014-10-28 15:17 282题目描述 Implement strStr(). Retu ... -
Valid Palindrome
2014-10-23 10:32 418题目描述 Given a string, determine ... -
ZigZag Conversion
2014-10-22 19:51 340题目描述 The string "PAYPALIS ... -
Add Binary
2014-10-22 19:43 301题目描述 Given two binary strings, ... -
Longest Common Prefix
2014-10-22 19:44 326题目描述 Write a function to find t ... -
Count and Say
2014-10-22 19:44 346题目描述 The count-and-say sequence ... -
Valid Sudoku
2014-10-21 10:22 353题目描述 Determine if a Sudoku is v ... -
Valid Parentheses
2014-10-21 09:41 322题目描述 Given a string containing ... -
Palindrome Number
2014-10-21 09:41 343题目描述 Determine whether an integ ... -
Length of Last Word
2014-10-21 09:41 356题目描述 Given a string s consists ... -
Minimum Depth of Binary Tree
2014-10-21 09:41 307题目描述 Given a binary tree, find ... -
Remove Nth Node From End of List
2014-10-20 16:36 255题目描述 Given a linked list, remov ... -
Path Sum
2014-10-20 15:37 292题目描述 Given a binary tree and a ... -
Binary Tree Level Order Traversal II
2014-10-20 11:17 232题目描述 Given a binary tree, retur ... -
Binary Tree Level Order Traversal
2014-10-20 11:03 291题目描述 Given a binary tree, retur ... -
Pascal's Triangle II
2014-10-20 10:07 255题目描述 Given an index k, return t ... -
Pascal's Triangle
2014-10-19 12:24 317题目描述 Given numRows, generate th ... -
Plus One
2014-10-19 11:51 334题目描述 Given a non-negative numbe ...
相关推荐
java面试算法/刷题
Symmetric Tree Balanced Binary Tree Flatten Binary Tree to Linked List Populating Next Right Pointers in Each Node II 二叉树的构建 Construct Binary Tree from Preorder and Inorder Traversal Construct ...
lru缓存leetcode ...https://leetcode.com/problems/symmetric-tree/ Symmetric Tree 102 https://leetcode.com/problems/binary-tree-level-order-traversal/ Binary Tree Level Order Traversal 103 ...
* [Binary Search Tree](https://github.com/kamyu104/LeetCode#binary-search-tree) * [Breadth-First Search](https://github.com/kamyu104/LeetCode#breadth-first-search) * [Depth-First Search]...
Symmetric tree - Java Recursive - Java Iterative - C Recursive - Python Iterative 0102 Binary Tree Level Order Traversal - Python3 iterative 0103 Binary Tree Zigzag Level Order Traversal - ...
leetcode 答案 LeetCode-Trip ...Symmetric Tree] [104. Maximum Depth of Binary Tree] [121. Best Time to Buy and Sell Stock] [167. Two Sum II - Input array is sorted] Medium [2. Add Two Numbers]
isSymmetric(TreeNode root) { if(root == NULL) return true; return checkSymmetric(root->left, root->right); } bool checkSymmetric(TreeNode* left, TreeNode* right) { if(left == NULL && right == NULL) ...
101.symmetric-tree (对称二叉树) 102.binary-tree-level-order-traversal (二叉树的层序遍历) 104.maximum-depth-of-binary-tree (二叉树的最大深度) 105.construct-binary-tree-from-preorder-and-inorder-...
leetcode 树节点leetcode 测试 仅使用适用于python 方便本地测试,ListNode和TreeNode类型 # filename leetcode.py from leetcode_test ...isSymmetric(self, ...symmetric(left, ...tree = TreeNode.create
对称的二叉树(递归,清晰图解)# Definition for a binary tree node.def isSymmetric(self, root: T
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)...
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。...
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 [1] 红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-...
28.3 Symmetric positive-definite matrices and least-squares approximation 832 29 Linear Programming 843 29.1 Standard and slack forms 850 29.2 Formulating problems as linear programs 859 29.3 The ...
28.3 Symmetric positive-definite matrices and least-squares approximation 832 29 Linear Programming 843 29.1 Standard and slack forms 850 29.2 Formulating problems as linear programs 859 29.3 The ...
28.3 Symmetric positive-definite matrices and least-squares approximation 832 29 Linear Programming 843 29.1 Standard and slack forms 850 29.2 Formulating problems as linear programs 859 29.3 The ...
红黑树(Red Black Tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。这种数据结构由Rudolf Bayer在1972年首次提出,当时被称为平衡二叉B树(Symmetric Binary B-...
leetcode分发糖果 Leetcode C++ Solution Don't try to understand it, feel ...21-合并两个有序链表:merge-two-sorted-lists 83-删除排序链表中的重复元素:remove-duplicates-from-sorted-...101-对称二叉树:symmetric-
6.5.4 set_symmetric_difference 336 6.6 heap算法:make_heap, pop_heap, push_heap, sort_heap 338 6.7 其它算法 338 6.7.1 单纯的数据处理 338 adjacent_find 343 count 344 count_if 344 find 345 find_...