@@ -246,6 +246,34 @@ var levelOrder = function(root) {
246
246
247
247
```
248
248
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
+
249
277
** 此时我们就掌握了二叉树的层序遍历了,那么如下九道力扣上的题目,只需要修改模板的两三行代码(不能再多了),便可打倒!**
250
278
251
279
@@ -426,6 +454,31 @@ var levelOrderBottom = function(root) {
426
454
};
427
455
```
428
456
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
+ ```
429
482
430
483
# 199.二叉树的右视图
431
484
@@ -604,6 +657,36 @@ var rightSideView = function(root) {
604
657
};
605
658
```
606
659
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
+
607
690
# 637.二叉树的层平均值
608
691
609
692
[力扣题目链接](https:// leetcode-cn.com/problems/average-of-levels-in-binary-tree/)
@@ -785,6 +868,34 @@ var averageOfLevels = function(root) {
785
868
};
786
869
```
787
870
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
+
788
899
# 429.N叉树的层序遍历
789
900
790
901
[力扣题目链接](https:// leetcode-cn.com/problems/n-ary-tree-level-order-traversal/)
@@ -981,6 +1092,31 @@ var levelOrder = function(root) {
981
1092
};
982
1093
```
983
1094
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
+
984
1120
# 515.在每个树行中找最大值
985
1121
986
1122
[ 力扣题目链接] ( https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/ )
@@ -1136,6 +1272,36 @@ var largestValues = function(root) {
1136
1272
};
1137
1273
```
1138
1274
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
+
1139
1305
# 116.填充每个节点的下一个右侧节点指针
1140
1306
1141
1307
[力扣题目链接](https:// leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/)
@@ -1338,6 +1504,37 @@ func connect(root *Node) *Node {
1338
1504
}
1339
1505
```
1340
1506
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
+
1341
1538
# 117.填充每个节点的下一个右侧节点指针II
1342
1539
1343
1540
[ 力扣题目链接] ( https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/ )
@@ -1532,6 +1729,38 @@ func connect(root *Node) *Node {
1532
1729
return root
1533
1730
}
1534
1731
```
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
+
1535
1764
# 104.二叉树的最大深度
1536
1765
1537
1766
[力扣题目链接](https:// leetcode-cn.com/problems/maximum-depth-of-binary-tree/)
@@ -1704,6 +1933,31 @@ var maxDepth = function(root) {
1704
1933
};
1705
1934
```
1706
1935
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
+
1707
1961
# 111.二叉树的最小深度
1708
1962
1709
1963
[力扣题目链接](https:// leetcode-cn.com/problems/minimum-depth-of-binary-tree/)
@@ -1876,7 +2130,33 @@ var minDepth = function(root) {
1876
2130
};
1877
2131
```
1878
2132
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
+ ```
1880
2160
1881
2161
1882
2162
# 总结
0 commit comments