`
淡淡的一抹
  • 浏览: 19030 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

解题思路
(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));
	}
}
分享到:
评论

相关推荐

    Code03_SymmetricTree.java

    java面试算法/刷题

    cpp-算法精粹

    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 ...

    lrucacheleetcode-luoleet:LeetcodesolutionsbyXinhangLuoandQinghaoDai

    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 ...

    LeetCode最全代码

    * [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]...

    javalruleetcode-what_the_dead_men_say:what_the_dead_men_say

    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:LeetCode刷题代码,大佬勿入

    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]

    leetcodetreenode-LeetCode---Symmetric-Tree:给定一棵二叉树,检查它是否是自身的镜像(即围绕其中心对称

    isSymmetric(TreeNode root) { if(root == NULL) return true; return checkSymmetric(root-&gt;left, root-&gt;right); } bool checkSymmetric(TreeNode* left, TreeNode* right) { if(left == NULL && right == NULL) ...

    四平方和定理leetcode-leetcode-practice:个人LeetCode练习代码

    101.symmetric-tree (对称二叉树) 102.binary-tree-level-order-traversal (二叉树的层序遍历) 104.maximum-depth-of-binary-tree (二叉树的最大深度) 105.construct-binary-tree-from-preorder-and-inorder-...

    leetcodetreenode-leetcode_test:测试你的代码

    leetcode 树节点leetcode 测试 仅使用适用于python 方便本地测试,ListNode和TreeNode类型 # filename leetcode.py from leetcode_test ...isSymmetric(self, ...symmetric(left, ...tree = TreeNode.create

    imhuay#algorithm#剑指Offer_0028_简单_对称的二叉树1

    对称的二叉树(递归,清晰图解)# 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)。...

    红黑树RBT.cpp

    红黑树(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 ...

    Introduction to Algorithms, 3rd edtion

    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 ...

    数据结构-红黑树.zip

    红黑树(Red Black Tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。这种数据结构由Rudolf Bayer在1972年首次提出,当时被称为平衡二叉B树(Symmetric Binary B-...

    leetcode分发糖果-ForDaFactory:使用C++的个人leetcode解决方案

    leetcode分发糖果 Leetcode C++ Solution Don't try to understand it, feel ...21-合并两个有序链表:merge-two-sorted-lists 83-删除排序链表中的重复元素:remove-duplicates-from-sorted-...101-对称二叉树:symmetric-

    STL 源码剖析(侯捷先生译著)

    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_...

Global site tag (gtag.js) - Google Analytics