zoukankan      html  css  js  c++  java
  • 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
    }
    
  • 相关阅读:
    git 拉取远程代码 git branch -vv --all
    常用命令统计
    topology key
    gstreamer 相关直播源(rtmp rtsp)
    汉诺塔问题 最简单的图文讲解递归实现
    RTP 用ffmpeg
    kurento + nodejs 开源项目 webRTC 转成 RTMP输出
    RTP SDP 详解 RTCP 附带说了一下SRTP RTSP
    RxSwiftCommunity/Action使用介绍
    zsh Shell 增加自动补全、语法高亮
  • 原文地址:https://www.cnblogs.com/dubinyang/p/12099393.html
Copyright © 2011-2022 走看看