mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 19:44:45 +08:00
Merge branch 'youngyangyang04:master' into master
This commit is contained in:
@ -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
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
**此时我们就掌握了二叉树的层序遍历了,那么如下九道力扣上的题目,只需要修改模板的两三行代码(不能再多了),便可打倒!**
|
**此时我们就掌握了二叉树的层序遍历了,那么如下九道力扣上的题目,只需要修改模板的两三行代码(不能再多了),便可打倒!**
|
||||||
|
|
||||||
|
|
||||||
@ -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.二叉树的右视图
|
# 199.二叉树的右视图
|
||||||
|
|
||||||
@ -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.二叉树的层平均值
|
# 637.二叉树的层平均值
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/)
|
[力扣题目链接](https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/)
|
||||||
@ -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叉树的层序遍历
|
# 429.N叉树的层序遍历
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal/)
|
[力扣题目链接](https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal/)
|
||||||
@ -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.在每个树行中找最大值
|
# 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/)
|
||||||
@ -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.填充每个节点的下一个右侧节点指针
|
# 116.填充每个节点的下一个右侧节点指针
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/)
|
[力扣题目链接](https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/)
|
||||||
@ -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
|
# 117.填充每个节点的下一个右侧节点指针II
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/)
|
[力扣题目链接](https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/)
|
||||||
@ -1532,6 +1729,38 @@ func connect(root *Node) *Node {
|
|||||||
return root
|
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.二叉树的最大深度
|
# 104.二叉树的最大深度
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/)
|
[力扣题目链接](https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/)
|
||||||
@ -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.二叉树的最小深度
|
# 111.二叉树的最小深度
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/)
|
[力扣题目链接](https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/)
|
||||||
@ -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
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
# 总结
|
# 总结
|
||||||
|
@ -609,5 +609,43 @@ struct TreeNode* invertTree(struct TreeNode* root){
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Swift:
|
||||||
|
```swift
|
||||||
|
// 前序遍历-递归
|
||||||
|
func invertTree(_ root: TreeNode?) -> TreeNode? {
|
||||||
|
guard let root = root else {
|
||||||
|
return root
|
||||||
|
}
|
||||||
|
let tmp = root.left
|
||||||
|
root.left = root.right
|
||||||
|
root.right = tmp
|
||||||
|
let _ = invertTree(root.left)
|
||||||
|
let _ = invertTree(root.right)
|
||||||
|
return root
|
||||||
|
}
|
||||||
|
|
||||||
|
// 层序遍历-迭代
|
||||||
|
func invertTree1(_ root: TreeNode?) -> TreeNode? {
|
||||||
|
guard let root = root else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var queue = [TreeNode]()
|
||||||
|
queue.append(root)
|
||||||
|
while !queue.isEmpty {
|
||||||
|
let node = queue.removeFirst()
|
||||||
|
let tmp = node.left
|
||||||
|
node.left = node.right
|
||||||
|
node.right = tmp
|
||||||
|
if let left = node.left {
|
||||||
|
queue.append(left)
|
||||||
|
}
|
||||||
|
if let right = node.right {
|
||||||
|
queue.append(right)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return root
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||||
|
Reference in New Issue
Block a user