• leetcode刷题笔记一百零一题 对称二叉树


    leetcode刷题笔记一百零一题 对称二叉树

    源地址:101. 对称二叉树

    问题描述:

    给定一个二叉树,检查它是否是镜像对称的。

    例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1

    /
    2 2
    / /
    3 4 4 3

    但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1

    /
    2 2

    3 3

    进阶:

    你可以运用递归和迭代两种方法解决这个问题吗?

    /**
    本题较为简单,可主要分为递归与迭代两种方法
    如何判断二叉树镜像?
    1.p与q根结点值相等
    2.p的左子树与q右子树相同,p的右子树与q的左子树如同
    */
    
    //递归
    /**
     * Definition for a binary tree node.
     * class TreeNode(var _value: Int) {
     *   var value: Int = _value
     *   var left: TreeNode = null
     *   var right: TreeNode = null
     * }
     */
    object Solution {
        def isSymmetric(root: TreeNode): Boolean = {
            def rec(leftTree: TreeNode, rightTree: TreeNode): Boolean = {
                if (leftTree == null && rightTree == null) return true
                if (leftTree == null || rightTree == null) return false
                if (leftTree.value == rightTree.value) return(rec(leftTree.left, rightTree.right) && rec(leftTree.right, rightTree.left))
                return false
            }
            return rec(root, root)
        }
    }
    
    //迭代,这种情况需要使用队列
    /**
     * Definition for a binary tree node.
     * class TreeNode(var _value: Int) {
     *   var value: Int = _value
     *   var left: TreeNode = null
     *   var right: TreeNode = null
     * }
     */
    import scala.collection.mutable.Queue
    import util.control.Breaks._ 
    object Solution {
        def isSymmetric(root: TreeNode): Boolean = {
            val queue = new Queue[TreeNode]()
            queue.enqueue(root)
            queue.enqueue(root)
            while (queue.isEmpty == false){
                breakable{
                    val left = queue.dequeue
                    val right = queue.dequeue
                    if (left == null && right == null) break()
                    if (left == null || right == null) return false
                    if (left.value != right.value) return false
                    queue.enqueue(left.left)
                    queue.enqueue(right.right)
                    queue.enqueue(left.right)
                    queue.enqueue(right.left)
                }
            }
            return true
        }
    
  • 相关阅读:
    Jetson AGX Xavier初始化
    Jetson AGX Xavier更换apt-get源
    Mac远程访问Ubuntu
    Anaconda安装和环境的搭建
    C# NotifyIcon 托盘控件
    VS2010+OpenMP的简单使用
    VS2010+OpenCV3.4.1+zbar 64位
    datatbales 使用笔记
    ubuntu16.04 常用软件
    crontab不能正常执行的五种原因
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13427643.html
Copyright © 2020-2023  润新知