Skip to content

Commit

Permalink
添加 102.二叉树的层序遍历 Swift版本
Browse files Browse the repository at this point in the history
  • Loading branch information
qxuewei committed Jan 5, 2022
1 parent f8c32ab commit 4b0460c
Showing 1 changed file with 281 additions and 1 deletion.
282 changes: 281 additions & 1 deletion problems/0102.二叉树的层序遍历.md
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,34 @@ var levelOrder = function(root) {

```

Swift:
```swift
func levelOrder(_ root: TreeNode?) -> [[Int]] {
var res = [[Int]]()
guard let root = root else {
return res
}
var queue = [TreeNode]()
queue.append(root)
while !queue.isEmpty {
let size = queue.count
var sub = [Int]()
for _ in 0 ..< size {
let node = queue.removeFirst()
sub.append(node.val)
if let left = node.left {
queue.append(left)
}
if let right = node.right {
queue.append(right)
}
}
res.append(sub)
}
return res
}
```

**此时我们就掌握了二叉树的层序遍历了,那么如下九道力扣上的题目,只需要修改模板的两三行代码(不能再多了),便可打倒!**


Expand Down Expand Up @@ -426,6 +454,31 @@ var levelOrderBottom = function(root) {
};
```

Swift:
```swift
func levelOrderBottom(_ root: TreeNode?) -> [[Int]] {
var res = [[Int]]()
guard let root = root else {
return res
}
var queue: [TreeNode] = [root]
while !queue.isEmpty {
var sub = [Int]()
for _ in 0 ..< queue.count {
let node = queue.removeFirst()
sub.append(node.val)
if let left = node.left {
queue.append(left)
}
if let right = node.right {
queue.append(right)
}
}
res.insert(sub, at: 0)
}
return res
}
```

# 199.二叉树的右视图

Expand Down Expand Up @@ -604,6 +657,36 @@ var rightSideView = function(root) {
};
```

Swift:
```swift
func rightSideView(_ root: TreeNode?) -> [Int] {
var res = [Int]()
guard let root = root else {
return res
}
var queue = [TreeNode]()
queue.append(root)
while !queue.isEmpty {
let size = queue.count
for i in 0 ..< size {
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)
}
}
}
return res
}
```


# 637.二叉树的层平均值

[力扣题目链接](https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/)
Expand Down Expand Up @@ -785,6 +868,34 @@ var averageOfLevels = function(root) {
};
```

Swift:
```swift
func averageOfLevels(_ root: TreeNode?) -> [Double] {
var res = [Double]()
guard let root = root else {
return res
}
var queue = [TreeNode]()
queue.append(root)
while !queue.isEmpty {
let size = queue.count
var sum = 0
for _ in 0 ..< size {
let node = queue.removeFirst()
sum += node.val
if let left = node.left {
queue.append(left)
}
if let right = node.right {
queue.append(right)
}
}
res.append(Double(sum) / Double(size))
}
return res
}
```

# 429.N叉树的层序遍历

[力扣题目链接](https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal/)
Expand Down Expand Up @@ -981,6 +1092,31 @@ var levelOrder = function(root) {
};
```

Swift:
```swift
func levelOrder(_ root: Node?) -> [[Int]] {
var res = [[Int]]()
guard let root = root else {
return res
}
var queue = [Node]()
queue.append(root)
while !queue.isEmpty {
let size = queue.count
var sub = [Int]()
for _ in 0 ..< size {
let node = queue.removeFirst()
sub.append(node.val)
for childNode in node.children {
queue.append(childNode)
}
}
res.append(sub)
}
return res
}
```

# 515.在每个树行中找最大值

[力扣题目链接](https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/)
Expand Down Expand Up @@ -1136,6 +1272,36 @@ var largestValues = function(root) {
};
```

Swift:
```swift
func largestValues(_ root: TreeNode?) -> [Int] {
var res = [Int]()
guard let root = root else {
return res
}
var queue = [TreeNode]()
queue.append(root)
while !queue.isEmpty {
let size = queue.count
var max: Int = Int.min
for _ in 0 ..< size {
let node = queue.removeFirst()
if node.val > max {
max = node.val
}
if let left = node.left {
queue.append(left)
}
if let right = node.right {
queue.append(right)
}
}
res.append(max)
}
return res
}
```

# 116.填充每个节点的下一个右侧节点指针

[力扣题目链接](https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/)
Expand Down Expand Up @@ -1338,6 +1504,37 @@ func connect(root *Node) *Node {
}
```

Swift:
```swift
func connect(_ root: Node?) -> Node? {
guard let root = root else {
return nil
}
var queue = [Node]()
queue.append(root)
while !queue.isEmpty {
let size = queue.count
var preNode: Node?
for i in 0 ..< size {
let node = queue.removeFirst()
if i == 0 {
preNode = node
} else {
preNode?.next = node
preNode = node
}
if let left = node.left {
queue.append(left)
}
if let right = node.right {
queue.append(right)
}
}
}
return root
}
```

# 117.填充每个节点的下一个右侧节点指针II

[力扣题目链接](https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/)
Expand Down Expand Up @@ -1532,6 +1729,38 @@ 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)
while !queue.isEmpty {
let size = queue.count
var preNode: Node?
for i in 0 ..< size {
let node = queue.removeFirst()
if i == 0 {
preNode = node
} else {
preNode?.next = node
preNode = node
}
if let left = node.left {
queue.append(left)
}
if let right = node.right {
queue.append(right)
}
}
}
return root
}
```

# 104.二叉树的最大深度

[力扣题目链接](https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/)
Expand Down Expand Up @@ -1704,6 +1933,31 @@ var maxDepth = function(root) {
};
```

Swift:
```swift
func maxDepth(_ root: TreeNode?) -> Int {
guard let root = root else {
return 0
}
var queue = [TreeNode]()
queue.append(root)
var res: Int = 0
while !queue.isEmpty {
for _ in 0 ..< queue.count {
let node = queue.removeFirst()
if let left = node.left {
queue.append(left)
}
if let right = node.right {
queue.append(right)
}
}
res += 1
}
return res
}
```

# 111.二叉树的最小深度

[力扣题目链接](https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/)
Expand Down Expand Up @@ -1876,7 +2130,33 @@ var minDepth = function(root) {
};
```


Swift:
```swift
func minDepth(_ root: TreeNode?) -> Int {
guard let root = root else {
return 0
}
var res = 0
var queue = [TreeNode]()
queue.append(root)
while !queue.isEmpty {
res += 1
for _ in 0 ..< queue.count {
let node = queue.removeFirst()
if node.left == nil && node.right == nil {
return res
}
if let left = node.left {
queue.append(left)
}
if let right = node.right {
queue.append(right)
}
}
}
return res
}
```


# 总结
Expand Down

0 comments on commit 4b0460c

Please sign in to comment.