Merge pull request #1352 from wzqwtt/tree03

添加(199.二叉树的右视图、637.二叉树的层平均值、429.N叉树的层序遍历)Scala版本
This commit is contained in:
程序员Carl
2022-06-10 09:37:52 +08:00
committed by GitHub

View File

@ -880,6 +880,31 @@ func rightSideView(_ root: TreeNode?) -> [Int] {
} }
``` ```
Scala:
```scala
// 199.二叉树的右视图
object Solution {
import scala.collection.mutable
def rightSideView(root: TreeNode): List[Int] = {
val res = mutable.ListBuffer[Int]()
if (root == null) return res.toList
val queue = mutable.Queue[TreeNode]()
queue.enqueue(root)
while (!queue.isEmpty) {
val len = queue.size
var curNode: TreeNode = null
for (i <- 0 until len) {
curNode = queue.dequeue()
if (curNode.left != null) queue.enqueue(curNode.left)
if (curNode.right != null) queue.enqueue(curNode.right)
}
res.append(curNode.value) // 把最后一个节点的值加入解集
}
res.toList // 最后需要把res转换为Listreturn关键字可以省略
}
}
```
# 637.二叉树的层平均值 # 637.二叉树的层平均值
[力扣题目链接](https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/) [力扣题目链接](https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/)
@ -1111,6 +1136,30 @@ func averageOfLevels(_ root: TreeNode?) -> [Double] {
return result return result
} }
``` ```
Scala:
```scala
// 637.二叉树的层平均值
object Solution {
import scala.collection.mutable
def averageOfLevels(root: TreeNode): Array[Double] = {
val res = mutable.ArrayBuffer[Double]()
val queue = mutable.Queue[TreeNode]()
queue.enqueue(root)
while (!queue.isEmpty) {
var sum = 0.0
var len = queue.size
for (i <- 0 until len) {
var curNode = queue.dequeue()
sum += curNode.value // 累加该层的值
if (curNode.left != null) queue.enqueue(curNode.left)
if (curNode.right != null) queue.enqueue(curNode.right)
}
res.append(sum / len) // 平均值即为sum/len
}
res.toArray // 最后需要转换为Arrayreturn关键字可以省略
}
}
```
# 429.N叉树的层序遍历 # 429.N叉树的层序遍历
@ -1355,6 +1404,34 @@ func levelOrder(_ root: Node?) -> [[Int]] {
} }
``` ```
Scala:
```scala
// 429.N叉树的层序遍历
object Solution {
import scala.collection.mutable
def levelOrder(root: Node): List[List[Int]] = {
val res = mutable.ListBuffer[List[Int]]()
if (root == null) return res.toList
val queue = mutable.Queue[Node]()
queue.enqueue(root) // 根节点入队
while (!queue.isEmpty) {
val tmp = mutable.ListBuffer[Int]() // 存储每层节点
val len = queue.size
for (i <- 0 until len) {
val curNode = queue.dequeue()
tmp.append(curNode.value) // 将该节点的值加入tmp
// 循环遍历该节点的子节点,加入队列
for (child <- curNode.children) {
queue.enqueue(child)
}
}
res.append(tmp.toList) // 将该层的节点放到结果集
}
res.toList
}
}
```
# 515.在每个树行中找最大值 # 515.在每个树行中找最大值
[力扣题目链接](https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/) [力扣题目链接](https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/)