美文网首页
LeetCode 965.单值二叉树 python/scala

LeetCode 965.单值二叉树 python/scala

作者: 电饭锅娃儿 | 来源:发表于2021-01-26 23:04 被阅读0次

Univalued Binary Tree

环境:python 3.6,scala 2.11.8

题意

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false

分析

代码

python

def isUnivalTree(root):
    """
    :type root: TreeNode
    :rtype: bool
    """
    if not root: return True
    value = root.val

    def dfs(node):
        if not node: return True # 这里的判断需要注意
        if node.val != value: return False
        return dfs(node.left) and dfs(node.right)
    return dfs(root)


# 先序
def isUnivalTreeV2(root):
    if not root: return False
    value = root.val
    stack = [root]
    while stack:
        curr = stack.pop()
        if curr:
            if curr.val != value: return False
            stack.append(curr.right)
            stack.append(curr.left)
    return True

scala

import scala.collection.mutable.Queue

object LC965 {
  def isUnivalTree(root: TreeNode): Boolean = {
    if (root == null) return true
    val value = root.value

    def dfs(node: TreeNode): Boolean = {
      if (node == null) true
      else if (node.value != value) false
      else dfs(node.left) & dfs(node.right)
    }
    dfs(root)
  }

  def isUnivalTree1(root: TreeNode): Boolean = {
    def dfs(node: TreeNode): Boolean = node match {
      case null => true
      case _ =>
        if (node.value != root.value) false
        else dfs(node.left) & dfs(node.right)
    }
    dfs(root)
  }

  def isUnivalTreeV2(root: TreeNode): Boolean = {
    if (root == null) return true
    val value = root.value
    val q = Queue[TreeNode](root)

    while (!q.isEmpty) {
      val curr = q.dequeue()
      if (curr != null) {
        if (curr.value != value) return false
        q.enqueue(curr.left)
        q.enqueue(curr.right)
      }
    }
    true
  }

  // 仍是队列的思路
  def isUnivalTreeV3(root: TreeNode): Boolean = {
    def go(currList: List[TreeNode]): Boolean = currList match {
      case Nil => true
      case h :: tail if h == null => go(tail)
      case h :: _ if h.value != root.value => false
      case h :: tail =>   go(tail ::: List(h.left, h.right))
    }
    go(List(root))
  }

  // 层次遍历思路
  def isUnivalTreeV4(root: TreeNode): Boolean = {
    def go(currList: List[TreeNode]): Boolean = currList match {
      case Nil => true
      case _ =>
        val nextLevel = currList.flatMap{node => List(node.left, node.right)}.filter(_ != null)
        if (nextLevel.exists(_.value != root.value)) false
        else go(nextLevel)
    }
    go(if (root == null) Nil else List(root))
  }
}

最后

欢迎交流和补充

相关文章

  • 965. 单值二叉树

    965. 单值二叉树 - 力扣(LeetCode)[https://leetcode.cn/problems/un...

  • LeetCode 965.单值二叉树 python/scala

    Univalued Binary Tree 环境:python 3.6,scala 2.11.8 题意 如果二叉树...

  • LeetCode 965. 单值二叉树

    965. 单值二叉树 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,...

  • Leetcode-965: 单值二叉树

    965. 单值二叉树 1. 问题描述 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树...

  • 965. 单值二叉树(Python)

    更多精彩内容,请关注【力扣简单题】。 题目 难度:★☆☆☆☆类型:二叉树 如果二叉树每个节点都具有相同的值,那么该...

  • 965. 单值二叉树

    如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 true;否则...

  • LeetCode | 面试题34. 二叉树中和为某一值的路径【剑

    LeetCode 面试题34. 二叉树中和为某一值的路径【剑指Offer】【Medium】【Python】【回溯】...

  • 2019-03-07 Day 60

    1.#### 单值二叉树如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时...

  • LeetCode刷题之路 单值二叉树

    单值二叉树【简单】 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才...

  • 类结构

    Scala类结构 scala和python类似,scala中所有值都是继承自Any,包括函数。所以在scala之中...

网友评论

      本文标题:LeetCode 965.单值二叉树 python/scala

      本文链接:https://www.haomeiwen.com/subject/bcznzktx.html