mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-12 21:50:49 +08:00
0102.二叉树的层序遍历:优化排版,补充Swift版本
# Conflicts: # problems/0102.二叉树的层序遍历.md
This commit is contained in:
@ -273,32 +273,29 @@ function levelOrder(root: TreeNode | null): number[][] {
|
||||
};
|
||||
```
|
||||
|
||||
Swift:
|
||||
Swift:
|
||||
|
||||
```swift
|
||||
func levelOrder(_ root: TreeNode?) -> [[Int]] {
|
||||
var res = [[Int]]()
|
||||
guard let root = root else {
|
||||
return res
|
||||
}
|
||||
var queue = [TreeNode]()
|
||||
queue.append(root)
|
||||
var result = [[Int]]()
|
||||
guard let root = root else { return result }
|
||||
// 表示一层
|
||||
var queue = [root]
|
||||
while !queue.isEmpty {
|
||||
let size = queue.count
|
||||
var sub = [Int]()
|
||||
for _ in 0 ..< size {
|
||||
let count = queue.count
|
||||
var subarray = [Int]()
|
||||
for _ in 0 ..< count {
|
||||
// 当前层
|
||||
let node = queue.removeFirst()
|
||||
sub.append(node.val)
|
||||
if let left = node.left {
|
||||
queue.append(left)
|
||||
subarray.append(node.val)
|
||||
// 下一层
|
||||
if let node = node.left { queue.append(node) }
|
||||
if let node = node.right { queue.append(node) }
|
||||
}
|
||||
if let right = node.right {
|
||||
queue.append(right)
|
||||
result.append(subarray)
|
||||
}
|
||||
}
|
||||
res.append(sub)
|
||||
}
|
||||
return res
|
||||
|
||||
return result
|
||||
}
|
||||
```
|
||||
|
||||
@ -505,30 +502,29 @@ function levelOrderBottom(root: TreeNode | null): number[][] {
|
||||
};
|
||||
```
|
||||
|
||||
Swift:
|
||||
Swift:
|
||||
|
||||
```swift
|
||||
func levelOrderBottom(_ root: TreeNode?) -> [[Int]] {
|
||||
var res = [[Int]]()
|
||||
guard let root = root else {
|
||||
return res
|
||||
}
|
||||
var queue: [TreeNode] = [root]
|
||||
// 表示一层
|
||||
var queue = [TreeNode]()
|
||||
if let node = root { queue.append(node) }
|
||||
var result = [[Int]]()
|
||||
while !queue.isEmpty {
|
||||
var sub = [Int]()
|
||||
for _ in 0 ..< queue.count {
|
||||
let count = queue.count
|
||||
var subarray = [Int]()
|
||||
for _ in 0 ..< count {
|
||||
// 当前层
|
||||
let node = queue.removeFirst()
|
||||
sub.append(node.val)
|
||||
if let left = node.left {
|
||||
queue.append(left)
|
||||
subarray.append(node.val)
|
||||
// 下一层
|
||||
if let node = node.left { queue.append(node) }
|
||||
if let node = node.right { queue.append(node)}
|
||||
}
|
||||
if let right = node.right {
|
||||
queue.append(right)
|
||||
result.append(subarray)
|
||||
}
|
||||
}
|
||||
res.insert(sub, at: 0)
|
||||
}
|
||||
return res
|
||||
|
||||
return result.reversed()
|
||||
}
|
||||
```
|
||||
|
||||
@ -729,37 +725,31 @@ function rightSideView(root: TreeNode | null): number[] {
|
||||
};
|
||||
```
|
||||
|
||||
Swift:
|
||||
Swift:
|
||||
|
||||
```swift
|
||||
func rightSideView(_ root: TreeNode?) -> [Int] {
|
||||
var res = [Int]()
|
||||
guard let root = root else {
|
||||
return res
|
||||
}
|
||||
// 表示一层
|
||||
var queue = [TreeNode]()
|
||||
queue.append(root)
|
||||
if let node = root { queue.append(node) }
|
||||
var result = [Int]()
|
||||
while !queue.isEmpty {
|
||||
let size = queue.count
|
||||
for i in 0 ..< size {
|
||||
let count = queue.count
|
||||
for i in 0 ..< count {
|
||||
// 当前层
|
||||
let node = queue.removeFirst()
|
||||
if i == size - 1 {
|
||||
// 保存 每层最后一个元素
|
||||
res.append(node.val)
|
||||
}
|
||||
if let left = node.left {
|
||||
queue.append(left)
|
||||
}
|
||||
if let right = node.right {
|
||||
queue.append(right)
|
||||
if i == count - 1 { result.append(node.val) }
|
||||
|
||||
// 下一层
|
||||
if let node = node.left { queue.append(node) }
|
||||
if let node = node.right { queue.append(node) }
|
||||
}
|
||||
}
|
||||
}
|
||||
return res
|
||||
|
||||
return result
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
# 637.二叉树的层平均值
|
||||
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/)
|
||||
@ -965,32 +955,30 @@ function averageOfLevels(root: TreeNode | null): number[] {
|
||||
};
|
||||
```
|
||||
|
||||
Swift:
|
||||
Swift:
|
||||
|
||||
```swift
|
||||
func averageOfLevels(_ root: TreeNode?) -> [Double] {
|
||||
var res = [Double]()
|
||||
guard let root = root else {
|
||||
return res
|
||||
}
|
||||
// 表示一层
|
||||
var queue = [TreeNode]()
|
||||
queue.append(root)
|
||||
if let node = root { queue.append(node) }
|
||||
var result = [Double]()
|
||||
while !queue.isEmpty {
|
||||
let size = queue.count
|
||||
let count = queue.count
|
||||
var sum = 0
|
||||
for _ in 0 ..< size {
|
||||
for _ in 0 ..< count {
|
||||
// 当前层
|
||||
let node = queue.removeFirst()
|
||||
sum += node.val
|
||||
if let left = node.left {
|
||||
queue.append(left)
|
||||
|
||||
// 下一层
|
||||
if let node = node.left { queue.append(node) }
|
||||
if let node = node.right { queue.append(node) }
|
||||
}
|
||||
if let right = node.right {
|
||||
queue.append(right)
|
||||
result.append(Double(sum) / Double(count))
|
||||
}
|
||||
}
|
||||
res.append(Double(sum) / Double(size))
|
||||
}
|
||||
return res
|
||||
|
||||
return result
|
||||
}
|
||||
```
|
||||
|
||||
@ -1212,29 +1200,28 @@ function levelOrder(root: Node | null): number[][] {
|
||||
};
|
||||
```
|
||||
|
||||
Swift:
|
||||
Swift:
|
||||
|
||||
```swift
|
||||
func levelOrder(_ root: Node?) -> [[Int]] {
|
||||
var res = [[Int]]()
|
||||
guard let root = root else {
|
||||
return res
|
||||
}
|
||||
// 表示一层
|
||||
var queue = [Node]()
|
||||
queue.append(root)
|
||||
if let node = root { queue.append(node) }
|
||||
var result = [[Int]]()
|
||||
while !queue.isEmpty {
|
||||
let size = queue.count
|
||||
var sub = [Int]()
|
||||
for _ in 0 ..< size {
|
||||
let count = queue.count
|
||||
var subarray = [Int]()
|
||||
for _ in 0 ..< count {
|
||||
// 当前层
|
||||
let node = queue.removeFirst()
|
||||
sub.append(node.val)
|
||||
for childNode in node.children {
|
||||
queue.append(childNode)
|
||||
subarray.append(node.val)
|
||||
// 下一层
|
||||
for node in node.children { queue.append(node) }
|
||||
}
|
||||
result.append(subarray)
|
||||
}
|
||||
res.append(sub)
|
||||
}
|
||||
return res
|
||||
|
||||
return result
|
||||
}
|
||||
```
|
||||
|
||||
@ -1419,34 +1406,30 @@ function largestValues(root: TreeNode | null): number[] {
|
||||
};
|
||||
```
|
||||
|
||||
Swift:
|
||||
Swift:
|
||||
|
||||
```swift
|
||||
func largestValues(_ root: TreeNode?) -> [Int] {
|
||||
var res = [Int]()
|
||||
guard let root = root else {
|
||||
return res
|
||||
}
|
||||
// 表示一层
|
||||
var queue = [TreeNode]()
|
||||
queue.append(root)
|
||||
if let node = root { queue.append(node) }
|
||||
var result = [Int]()
|
||||
while !queue.isEmpty {
|
||||
let size = queue.count
|
||||
var max: Int = Int.min
|
||||
for _ in 0 ..< size {
|
||||
let count = queue.count
|
||||
var max = queue[0].val
|
||||
for _ in 0 ..< count {
|
||||
// 当前层
|
||||
let node = queue.removeFirst()
|
||||
if node.val > max {
|
||||
max = node.val
|
||||
if node.val > max { max = node.val }
|
||||
|
||||
// 下一层
|
||||
if let node = node.left { queue.append(node) }
|
||||
if let node = node.right { queue.append(node) }
|
||||
}
|
||||
if let left = node.left {
|
||||
queue.append(left)
|
||||
result.append(max)
|
||||
}
|
||||
if let right = node.right {
|
||||
queue.append(right)
|
||||
}
|
||||
}
|
||||
res.append(max)
|
||||
}
|
||||
return res
|
||||
|
||||
return result
|
||||
}
|
||||
```
|
||||
|
||||
@ -1456,7 +1439,7 @@ func largestValues(_ root: TreeNode?) -> [Int] {
|
||||
|
||||
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
|
||||
|
||||
```
|
||||
```cpp
|
||||
struct Node {
|
||||
int val;
|
||||
Node *left;
|
||||
@ -1677,33 +1660,34 @@ func connect(root *Node) *Node {
|
||||
}
|
||||
```
|
||||
|
||||
Swift:
|
||||
Swift:
|
||||
|
||||
```swift
|
||||
func connect(_ root: Node?) -> Node? {
|
||||
guard let root = root else {
|
||||
return nil
|
||||
}
|
||||
// 表示一层
|
||||
var queue = [Node]()
|
||||
queue.append(root)
|
||||
if let node = root { queue.append(node) }
|
||||
while !queue.isEmpty {
|
||||
let size = queue.count
|
||||
var preNode: Node?
|
||||
for i in 0 ..< size {
|
||||
let node = queue.removeFirst()
|
||||
let count = queue.count
|
||||
var current, previous: Node!
|
||||
for i in 0 ..< count {
|
||||
// 当前层
|
||||
if i == 0 {
|
||||
preNode = node
|
||||
previous = queue.removeFirst()
|
||||
current = previous
|
||||
} else {
|
||||
preNode?.next = node
|
||||
preNode = node
|
||||
}
|
||||
if let left = node.left {
|
||||
queue.append(left)
|
||||
}
|
||||
if let right = node.right {
|
||||
queue.append(right)
|
||||
current = queue.removeFirst()
|
||||
previous.next = current
|
||||
previous = current
|
||||
}
|
||||
|
||||
// 下一层
|
||||
if let node = current.left { queue.append(node) }
|
||||
if let node = current.right { queue.append(node) }
|
||||
}
|
||||
previous.next = nil
|
||||
}
|
||||
|
||||
return root
|
||||
}
|
||||
```
|
||||
@ -1927,34 +1911,34 @@ func connect(root *Node) *Node {
|
||||
return root
|
||||
}
|
||||
```
|
||||
|
||||
Swift:
|
||||
|
||||
```swift
|
||||
func connect(_ root: Node?) -> Node? {
|
||||
guard let root = root else {
|
||||
return nil
|
||||
}
|
||||
// 表示一层
|
||||
var queue = [Node]()
|
||||
queue.append(root)
|
||||
if let node = root { queue.append(node) }
|
||||
while !queue.isEmpty {
|
||||
let size = queue.count
|
||||
var preNode: Node?
|
||||
for i in 0 ..< size {
|
||||
let node = queue.removeFirst()
|
||||
let count = queue.count
|
||||
var current, previous: Node!
|
||||
for i in 0 ..< count {
|
||||
// 当前层
|
||||
if i == 0 {
|
||||
preNode = node
|
||||
previous = queue.removeFirst()
|
||||
current = previous
|
||||
} else {
|
||||
preNode?.next = node
|
||||
preNode = node
|
||||
}
|
||||
if let left = node.left {
|
||||
queue.append(left)
|
||||
}
|
||||
if let right = node.right {
|
||||
queue.append(right)
|
||||
current = queue.removeFirst()
|
||||
previous.next = current
|
||||
previous = current
|
||||
}
|
||||
|
||||
// 下一层
|
||||
if let node = current.left { queue.append(node) }
|
||||
if let node = current.right { queue.append(node) }
|
||||
}
|
||||
previous.next = nil
|
||||
}
|
||||
|
||||
return root
|
||||
}
|
||||
```
|
||||
@ -2151,29 +2135,28 @@ function maxDepth(root: TreeNode | null): number {
|
||||
};
|
||||
```
|
||||
|
||||
Swift:
|
||||
Swift:
|
||||
|
||||
```swift
|
||||
func maxDepth(_ root: TreeNode?) -> Int {
|
||||
guard let root = root else {
|
||||
return 0
|
||||
}
|
||||
guard root != nil else { return 0 }
|
||||
var depth = 0
|
||||
var queue = [TreeNode]()
|
||||
queue.append(root)
|
||||
var res: Int = 0
|
||||
queue.append(root!)
|
||||
while !queue.isEmpty {
|
||||
for _ in 0 ..< queue.count {
|
||||
let count = queue.count
|
||||
depth += 1
|
||||
for _ in 0 ..< count {
|
||||
// 当前层
|
||||
let node = queue.removeFirst()
|
||||
if let left = node.left {
|
||||
queue.append(left)
|
||||
}
|
||||
if let right = node.right {
|
||||
queue.append(right)
|
||||
|
||||
// 下一层
|
||||
if let node = node.left { queue.append(node) }
|
||||
if let node = node.right { queue.append(node) }
|
||||
}
|
||||
}
|
||||
res += 1
|
||||
}
|
||||
return res
|
||||
|
||||
return depth
|
||||
}
|
||||
```
|
||||
|
||||
@ -2374,28 +2357,25 @@ Swift:
|
||||
|
||||
```swift
|
||||
func minDepth(_ root: TreeNode?) -> Int {
|
||||
guard let root = root else {
|
||||
return 0
|
||||
}
|
||||
var res = 0
|
||||
var queue = [TreeNode]()
|
||||
queue.append(root)
|
||||
guard root != nil else { return 0 }
|
||||
var depth = 0
|
||||
var queue = [root!]
|
||||
while !queue.isEmpty {
|
||||
res += 1
|
||||
for _ in 0 ..< queue.count {
|
||||
let count = queue.count
|
||||
depth += 1
|
||||
for _ in 0 ..< count {
|
||||
// 当前层
|
||||
let node = queue.removeFirst()
|
||||
if node.left == nil && node.right == nil {
|
||||
return res
|
||||
if node.left == nil, node.right == nil { // 遇到叶子结点则返回
|
||||
return depth
|
||||
}
|
||||
if let left = node.left {
|
||||
queue.append(left)
|
||||
}
|
||||
if let right = node.right {
|
||||
queue.append(right)
|
||||
|
||||
// 下一层
|
||||
if let node = node.left { queue.append(node) }
|
||||
if let node = node.right { queue.append(node) }
|
||||
}
|
||||
}
|
||||
}
|
||||
return res
|
||||
return depth
|
||||
}
|
||||
```
|
||||
|
||||
|
Reference in New Issue
Block a user