zoukankan      html  css  js  c++  java
  • 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
        }
    
  • 相关阅读:
    在energia中添加新的库
    KEIL3中出现的字符不对齐的情况解决办法
    VHDL硬件描述语言实现数字钟
    51单片机软件I2C驱动中的CY
    自问自答:在VB中如何实现像C++一样printf的功能
    [转][译] 分分钟学会一门语言之 Python 篇
    杂谈PID控制算法——最终篇:C语言实现51单片机中的PID算法
    Eclipse 安装与配置
    win10 环境安装 jdk 11.0.2
    解决网络问题神奇工具
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13427643.html
Copyright © 2011-2022 走看看