Skip to content

Commit efe0beb

Browse files
Merge pull request youngyangyang04#992 from qxuewei/master
添加 102.二叉树的层序遍历 Swift版本
2 parents 33dbdff + f7d1c7c commit efe0beb

File tree

2 files changed

+319
-1
lines changed

2 files changed

+319
-1
lines changed

Diff for: problems/0102.二叉树的层序遍历.md

+281-1
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,34 @@ var levelOrder = function(root) {
246246

247247
```
248248

249+
Swift:
250+
```swift
251+
func levelOrder(_ root: TreeNode?) -> [[Int]] {
252+
var res = [[Int]]()
253+
guard let root = root else {
254+
return res
255+
}
256+
var queue = [TreeNode]()
257+
queue.append(root)
258+
while !queue.isEmpty {
259+
let size = queue.count
260+
var sub = [Int]()
261+
for _ in 0 ..< size {
262+
let node = queue.removeFirst()
263+
sub.append(node.val)
264+
if let left = node.left {
265+
queue.append(left)
266+
}
267+
if let right = node.right {
268+
queue.append(right)
269+
}
270+
}
271+
res.append(sub)
272+
}
273+
return res
274+
}
275+
```
276+
249277
**此时我们就掌握了二叉树的层序遍历了,那么如下九道力扣上的题目,只需要修改模板的两三行代码(不能再多了),便可打倒!**
250278

251279

@@ -426,6 +454,31 @@ var levelOrderBottom = function(root) {
426454
};
427455
```
428456

457+
Swift:
458+
```swift
459+
func levelOrderBottom(_ root: TreeNode?) -> [[Int]] {
460+
var res = [[Int]]()
461+
guard let root = root else {
462+
return res
463+
}
464+
var queue: [TreeNode] = [root]
465+
while !queue.isEmpty {
466+
var sub = [Int]()
467+
for _ in 0 ..< queue.count {
468+
let node = queue.removeFirst()
469+
sub.append(node.val)
470+
if let left = node.left {
471+
queue.append(left)
472+
}
473+
if let right = node.right {
474+
queue.append(right)
475+
}
476+
}
477+
res.insert(sub, at: 0)
478+
}
479+
return res
480+
}
481+
```
429482

430483
# 199.二叉树的右视图
431484

@@ -604,6 +657,36 @@ var rightSideView = function(root) {
604657
};
605658
```
606659

660+
Swift:
661+
```swift
662+
func rightSideView(_ root: TreeNode?) -> [Int] {
663+
var res = [Int]()
664+
guard let root = root else {
665+
return res
666+
}
667+
var queue = [TreeNode]()
668+
queue.append(root)
669+
while !queue.isEmpty {
670+
let size = queue.count
671+
for i in 0 ..< size {
672+
let node = queue.removeFirst()
673+
if i == size - 1 {
674+
// 保存 每层最后一个元素
675+
res.append(node.val)
676+
}
677+
if let left = node.left {
678+
queue.append(left)
679+
}
680+
if let right = node.right {
681+
queue.append(right)
682+
}
683+
}
684+
}
685+
return res
686+
}
687+
```
688+
689+
607690
# 637.二叉树的层平均值
608691

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

871+
Swift:
872+
```swift
873+
func averageOfLevels(_ root: TreeNode?) -> [Double] {
874+
var res = [Double]()
875+
guard let root = root else {
876+
return res
877+
}
878+
var queue = [TreeNode]()
879+
queue.append(root)
880+
while !queue.isEmpty {
881+
let size = queue.count
882+
var sum = 0
883+
for _ in 0 ..< size {
884+
let node = queue.removeFirst()
885+
sum += node.val
886+
if let left = node.left {
887+
queue.append(left)
888+
}
889+
if let right = node.right {
890+
queue.append(right)
891+
}
892+
}
893+
res.append(Double(sum) / Double(size))
894+
}
895+
return res
896+
}
897+
```
898+
788899
# 429.N叉树的层序遍历
789900

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

1095+
Swift:
1096+
```swift
1097+
func levelOrder(_ root: Node?) -> [[Int]] {
1098+
var res = [[Int]]()
1099+
guard let root = root else {
1100+
return res
1101+
}
1102+
var queue = [Node]()
1103+
queue.append(root)
1104+
while !queue.isEmpty {
1105+
let size = queue.count
1106+
var sub = [Int]()
1107+
for _ in 0 ..< size {
1108+
let node = queue.removeFirst()
1109+
sub.append(node.val)
1110+
for childNode in node.children {
1111+
queue.append(childNode)
1112+
}
1113+
}
1114+
res.append(sub)
1115+
}
1116+
return res
1117+
}
1118+
```
1119+
9841120
# 515.在每个树行中找最大值
9851121

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

1275+
Swift:
1276+
```swift
1277+
func largestValues(_ root: TreeNode?) -> [Int] {
1278+
var res = [Int]()
1279+
guard let root = root else {
1280+
return res
1281+
}
1282+
var queue = [TreeNode]()
1283+
queue.append(root)
1284+
while !queue.isEmpty {
1285+
let size = queue.count
1286+
var max: Int = Int.min
1287+
for _ in 0 ..< size {
1288+
let node = queue.removeFirst()
1289+
if node.val > max {
1290+
max = node.val
1291+
}
1292+
if let left = node.left {
1293+
queue.append(left)
1294+
}
1295+
if let right = node.right {
1296+
queue.append(right)
1297+
}
1298+
}
1299+
res.append(max)
1300+
}
1301+
return res
1302+
}
1303+
```
1304+
11391305
# 116.填充每个节点的下一个右侧节点指针
11401306

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

1507+
Swift:
1508+
```swift
1509+
func connect(_ root: Node?) -> Node? {
1510+
guard let root = root else {
1511+
return nil
1512+
}
1513+
var queue = [Node]()
1514+
queue.append(root)
1515+
while !queue.isEmpty {
1516+
let size = queue.count
1517+
var preNode: Node?
1518+
for i in 0 ..< size {
1519+
let node = queue.removeFirst()
1520+
if i == 0 {
1521+
preNode = node
1522+
} else {
1523+
preNode?.next = node
1524+
preNode = node
1525+
}
1526+
if let left = node.left {
1527+
queue.append(left)
1528+
}
1529+
if let right = node.right {
1530+
queue.append(right)
1531+
}
1532+
}
1533+
}
1534+
return root
1535+
}
1536+
```
1537+
13411538
# 117.填充每个节点的下一个右侧节点指针II
13421539

13431540
[力扣题目链接](https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/)
@@ -1532,6 +1729,38 @@ func connect(root *Node) *Node {
15321729
return root
15331730
}
15341731
```
1732+
1733+
Swift:
1734+
```swift
1735+
func connect(_ root: Node?) -> Node? {
1736+
guard let root = root else {
1737+
return nil
1738+
}
1739+
var queue = [Node]()
1740+
queue.append(root)
1741+
while !queue.isEmpty {
1742+
let size = queue.count
1743+
var preNode: Node?
1744+
for i in 0 ..< size {
1745+
let node = queue.removeFirst()
1746+
if i == 0 {
1747+
preNode = node
1748+
} else {
1749+
preNode?.next = node
1750+
preNode = node
1751+
}
1752+
if let left = node.left {
1753+
queue.append(left)
1754+
}
1755+
if let right = node.right {
1756+
queue.append(right)
1757+
}
1758+
}
1759+
}
1760+
return root
1761+
}
1762+
```
1763+
15351764
# 104.二叉树的最大深度
15361765

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

1936+
Swift:
1937+
```swift
1938+
func maxDepth(_ root: TreeNode?) -> Int {
1939+
guard let root = root else {
1940+
return 0
1941+
}
1942+
var queue = [TreeNode]()
1943+
queue.append(root)
1944+
var res: Int = 0
1945+
while !queue.isEmpty {
1946+
for _ in 0 ..< queue.count {
1947+
let node = queue.removeFirst()
1948+
if let left = node.left {
1949+
queue.append(left)
1950+
}
1951+
if let right = node.right {
1952+
queue.append(right)
1953+
}
1954+
}
1955+
res += 1
1956+
}
1957+
return res
1958+
}
1959+
```
1960+
17071961
# 111.二叉树的最小深度
17081962

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

1879-
2133+
Swift:
2134+
```swift
2135+
func minDepth(_ root: TreeNode?) -> Int {
2136+
guard let root = root else {
2137+
return 0
2138+
}
2139+
var res = 0
2140+
var queue = [TreeNode]()
2141+
queue.append(root)
2142+
while !queue.isEmpty {
2143+
res += 1
2144+
for _ in 0 ..< queue.count {
2145+
let node = queue.removeFirst()
2146+
if node.left == nil && node.right == nil {
2147+
return res
2148+
}
2149+
if let left = node.left {
2150+
queue.append(left)
2151+
}
2152+
if let right = node.right {
2153+
queue.append(right)
2154+
}
2155+
}
2156+
}
2157+
return res
2158+
}
2159+
```
18802160

18812161

18822162
# 总结

Diff for: problems/0226.翻转二叉树.md

+38
Original file line numberDiff line numberDiff line change
@@ -609,5 +609,43 @@ struct TreeNode* invertTree(struct TreeNode* root){
609609
}
610610
```
611611

612+
### Swift:
613+
```swift
614+
// 前序遍历-递归
615+
func invertTree(_ root: TreeNode?) -> TreeNode? {
616+
guard let root = root else {
617+
return root
618+
}
619+
let tmp = root.left
620+
root.left = root.right
621+
root.right = tmp
622+
let _ = invertTree(root.left)
623+
let _ = invertTree(root.right)
624+
return root
625+
}
626+
627+
// 层序遍历-迭代
628+
func invertTree1(_ root: TreeNode?) -> TreeNode? {
629+
guard let root = root else {
630+
return nil
631+
}
632+
var queue = [TreeNode]()
633+
queue.append(root)
634+
while !queue.isEmpty {
635+
let node = queue.removeFirst()
636+
let tmp = node.left
637+
node.left = node.right
638+
node.right = tmp
639+
if let left = node.left {
640+
queue.append(left)
641+
}
642+
if let right = node.right {
643+
queue.append(right)
644+
}
645+
}
646+
return root
647+
}
648+
```
649+
612650
-----------------------
613651
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

0 commit comments

Comments
 (0)