Symmetric Tree 对称树
判断一棵二叉树是否为对称的树。如
1
/ \
2 2
/ \ / \
3 4 4 3
观察上面的树可以看出:左子树的右子树等于右子树的左子树,左子树的左子树等于右子树的右子树。
首先可以使用递归。递归容易理解
class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root==null) return true;
        return isSym(root.left,root.right);
    }
    public boolean isSym(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;
        return isSym(node1.left,node2.right)&&isSym(node1.right,node2.left);
    }
}
再是可以使用迭代,不用递归。
思路就是向遍历一样,每一层比较,但是不输出,只是在遍历过程中比较。使用广度优先遍历。因为要比较,所以一次取出两个节点,进行比较。然后存放时,因为需要比较的是a节点的左子树跟b节点的右子树,a节点的右子树和b节点的左子树。所以存放时也按照这种顺序存放进队列,方便取出两个时直接比较。见代码
 public boolean isSymmetric(TreeNode root) {
        if(root==null) return true;
        Queue<TreeNode> q=new LinkedList<>();
      //先存入两个节点,用于比较
        q.add(root.left);
        q.add(root.right);
        while(q.size()>0){
            TreeNode left=q.poll();
            TreeNode right=q.poll();
            if(left==null&&right==null) continue;//由于可能存入的就是null,所以还得继续比较
            if(left==null||right==null) return false;
            if(left.val!=right.val) return false;
      //这里存放顺序很重要,方便下次取出比较。
            q.add(left.left);
            q.add(right.right);
            q.add(left.right);
            q.add(right.left);
        }
        return true;
    }
Symmetric Tree 对称树的更多相关文章
- [leetcode] 101. Symmetric Tree 对称树
		题目大意 #!/usr/bin/env python # coding=utf-8 # Date: 2018-08-30 """ https://leetcode.com ... 
- [leetcode]101. Symmetric Tree对称树
		Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ... 
- leetcode-Symmetric Tree 对称树
		Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ... 
- 【LeetCode】101. Symmetric Tree 对称二叉树(Java & Python)
		作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS BFS 日期 [LeetCode] 题目地址 ... 
- [Leetcode] Symmetric tree 对称二叉树
		Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ... 
- 第28题:leetcode101:Symmetric Tree对称的二叉树
		给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,nul ... 
- 【LeetCode】Symmetric Tree(对称二叉树)
		这道题是LeetCode里的第101道题.是我在学数据结构——二叉树的时候碰见的题. 题目如下: 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 ... 
- 【LeetCode】Symmetric Tree 推断一棵树是否是镜像的
		题目:Symmetric Tree <span style="font-size:18px;"><span style="font-size:18px; ... 
- LeetCode 101. Symmetric Tree 判断对称树 C++
		Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ... 
随机推荐
- 2.QT中使用资源文件,程序打包
			 1 程序中使用资源文件 A 一个QT空项目 B 右击项目,添加新文件 添加后的效果是 C 右击main.prc,选择"添加现有项",找到要使用的资源文件.最终的效果是: ... 
- Hibernate配置文件current_session_context_class的意思
			转自:http://shuaigg-babysky.iteye.com/blog/563423 此设置的作用如下: What does sessionFactory.getCurrentSession ... 
- android开发之AlertDialog点击按钮之后不消失
			最近有这样一个需求,我需要用户在一个弹出框里输入密码来验证,验证成功当然好说,但是如果验证失败则需要把alertdialog的标题改为"密码错误,请重新输入",并且这个alertd ... 
- UNIX网络编程——UDP 中的外出接口的确定
			已连接UDP套接字还可用来确定用于特定目的地的外出接口.这是由connect函数应用到UDP套接字时的一个副作用造成的:内核选择本地IP地址.这个本地IP地址通过为目的IP地址搜索路由表得到外出接口, ... 
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(二)
			大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先在CatMazeV3中新建CatSprite类,继承于Spr ... 
- design principle:java 回调与委派/委托机制
			博客 design principle:模拟 android Button 控件点击事件 主要说了一下模拟 android 的 Listener 模式,其实这就是一种委派与回调机制的体现. 委派,也可 ... 
- Java:函数,类,数组之间的运用
			在我的demoe类中,我实现了以下方法: 这个类在另外一个文件,demoe.java中 public class Demoe { //计算一个数字因子的个数 public static int get ... 
- python的sys模块
			Sys模块函数之多,我只能选取自己认为比较实用的一些函数列在此处.借马云找员工的说法,"找最合适的而不是最天才的",这句话,我个人觉得在很多方面都能适应,学习也不在话下.Sys模块 ... 
- java中,用json格式转换遇到问题
			将list转为JSONObject类,报 org/apache/commons/lang/exception/NestableRuntimeException是什么原因? 还需要导入这些包common ... 
- Cocos2D中的Framerate状态
			对于额外绘制调试物理引擎的支持,Cocos2D同样可以绘制概述计数器,尤其是帧速率(framerate)显示. 为了启用这些概述计数器标签,你只需添加如下一行代码,比如说在AppDelegate.m里 ... 
