Go语言实现:【剑指offer】对称的二叉树
该题目来源于牛客网《剑指offer》专题。
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
Go语言实现:
方法一:递归
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func isSymmetric(root *TreeNode) bool {
    return symmetric(root, root)
}
func symmetric(t1 *TreeNode, t2 *TreeNode) bool {
    if t1 == nil && t2 == nil {
        return true
    }
    if t1 == nil || t2 == nil {
        return false
    }
    return (t1.Val == t2.Val) && symmetric(t1.Left, t2.Right) &&
        symmetric(t1.Right, t2.Left)
}
方法二:迭代
利用队列来进行迭代,队列中每两个连续的结点应该是相等的,而且它们的子树互为镜像。
func isSymmetric(root *TreeNode) bool {
    l := list.New()
    l.PushBack(root)
    l.PushBack(root)
    for l.Len() > 0 { //list初始化后不放元素也不为空,所以不能用nil判断
        t1 := l.Front().Value.(*TreeNode)
        l.Remove(l.Front())
        t2 := l.Front().Value.(*TreeNode)
        l.Remove(l.Front())
        if t1 == nil && t2 == nil {
            continue //此处不能直接返回true,左右完了,还有右左
        }
        if t1 == nil || t2 == nil {
            return false
        }
        if t1.Val != t2.Val {
            return false
        }
        l.PushBack(t1.Left)
        l.PushBack(t2.Right)
        l.PushBack(t1.Right)
        l.PushBack(t2.Left)
    }
    return true
}
												
											Go语言实现:【剑指offer】对称的二叉树的更多相关文章
- 剑指Offer——对称的二叉树
		
题目描述: 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 分析: 递归解法. 如果对称点一个有一边为空一边不为空,或者是对称点数值不一 ...
 - python实现剑指offer对称的二叉树
		
题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. # -*- coding:utf-8 -*- # class TreeNode ...
 - 剑指offer——已知二叉树的先序和中序排列,重构二叉树
		
这是剑指offer中关于二叉树重构的一道题.题目原型为: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2, ...
 - 《剑指offer》重建二叉树
		
本题来自<剑指offer> 重构二叉树 题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2 ...
 - 剑指Offer:重建二叉树【7】
		
剑指Offer:重建二叉树[7] 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5 ...
 - 剑指 Offer 68 - II. 二叉树的最近公共祖先 + 最近公共祖先(LCA)
		
剑指 Offer 68 - II. 二叉树的最近公共祖先 Offer_68_2 题目详情 题解分析 java代码 package com.walegarrett.offer; /** * @Autho ...
 - 剑指 Offer 37. 序列化二叉树 + 二叉树的层次遍历
		
剑指 Offer 37. 序列化二叉树 Offer_37 题目描述 题目解析 本题主要考察的就是二叉树的层次遍历. 层次遍历时可以根据二叉树的特点将空结点也进栈. 反序列化时同样可以根据层次遍历的思路 ...
 - 力扣 - 剑指 Offer 37. 序列化二叉树
		
目录 题目 思路 代码 复杂度分析 题目 剑指 Offer 37. 序列化二叉树 思路 序列化其实就是层序遍历 但是,要能反序列化的话,前.中.后.层序遍历是不够的,必须在序列化时候保存所有信息,这样 ...
 - 剑指 Offer 68 - II. 二叉树的最近公共祖先
		
剑指 Offer 68 - II. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近 ...
 - 力扣 - 剑指 Offer 55 - I. 二叉树的深度
		
题目 剑指 Offer 55 - I. 二叉树的深度 思路1(DFS) 后续遍历吧,先遍历到最深(递归到末尾返回0),然后从后面一步一步比较取大的值返回,每次返回层数都加1, 执行流程是怎样的:比如其 ...
 
随机推荐
- Node: 使用nrm管理npm源
			
一.简介 npm是一款非常好用的包管理工具,在前端开发中很多时候都会使用npm安装其他包文件.但是,npm安装某些包时有时会安装地很慢,这是因为npm管理的源中有些是国外的,包下载的时候需要花费很多时 ...
 - poj 2253 最短路 or  最小生成树
			
Freddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fiona Frog who is sit ...
 - .net core2.2上传文件总结
			
总结一下.net core的上传文件操作,这里主要分上传到本地的也就是MVC的,另一种是上传到WebAPi的. 一.Web端 1.新建一个.net core mvc项目 2.这里的版本是.net co ...
 - 2019 牛客国庆集训day1 2019 点分治
			
题目链接:https://ac.nowcoder.com/acm/contest/1099/I 点分治,计算路径数的时候,先将每个点到根的距离模2019,计算的时候就可以O(n)求出数目,对于模201 ...
 - [bzoj4444] [loj#2007] [洛谷P4155] [Scoi2015] 国旗计划
			
Description \(A\) 国正在开展一项伟大的计划--国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了 ...
 - CQBZOJ 避开怪兽
			
题目描述 给出一个N行M列的地图,地图形成一个有N*M个格子的矩阵.地图中的空地用'.'表示.其中某些格子有怪兽,用'+'表示.某人要从起点格子'V'走到终点格子'J',他可以向上.下.左.右四个方向 ...
 - quick-cocos2d-x项目《狂点小怪兽》总结
			
最近找了个公司实习,领导让我把公司的<狂点小怪兽>C++游戏用Lua重写.大概用了一个星期完成. 第一次使用quick-cocos2d-x,磕磕碰碰的也算是走了一遍流程. 1. quick ...
 - CSS-07-CSS文本设置
			
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
 - Spring框架学习笔记(8)——spring boot+mybatis plus+mysql项目环境搭建
			
之前写的那篇Spring框架学习笔记(5)--Spring Boot创建与使用,发现有多小细节没有提及,,正好现在又学习了mybatis plus这款框架,打算重新整理一遍,并将细节说清楚 1.通过I ...
 - ubuntu “快捷方式”
			
1.创建.Desktop文件 sudo gedit /usr/share/applications/pycharm.desktop 2.建立pycharm.desktop [Desktop Entry ...