mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-11 21:10:58 +08:00
更新 0102.二叉树的层序遍历 排版格式修复
This commit is contained in:
@ -8,21 +8,23 @@
|
|||||||
|
|
||||||
# 二叉树层序遍历登场!
|
# 二叉树层序遍历登场!
|
||||||
|
|
||||||
《代码随想录》算法视频公开课:[讲透二叉树的层序遍历 | 广度优先搜索 | LeetCode:102.二叉树的层序遍历](https://www.bilibili.com/video/BV1GY4y1u7b2),相信结合视频在看本篇题解,更有助于大家对本题的理解。
|
## 算法公开课
|
||||||
|
|
||||||
|
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[讲透二叉树的层序遍历 | 广度优先搜索 | LeetCode:102.二叉树的层序遍历](https://www.bilibili.com/video/BV1GY4y1u7b2),相信结合视频再看本篇题解,更有助于大家对本题的理解**。
|
||||||
|
|
||||||
|
|
||||||
学会二叉树的层序遍历,可以一口气打完以下十题:
|
学会二叉树的层序遍历,可以一口气打完以下十题:
|
||||||
|
|
||||||
* 102.二叉树的层序遍历
|
* [102.二叉树的层序遍历](https://leetcode.cn/problems/binary-tree-level-order-traversal/)
|
||||||
* 107.二叉树的层次遍历II
|
* [107.二叉树的层次遍历II](https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/)
|
||||||
* 199.二叉树的右视图
|
* [199.二叉树的右视图](https://leetcode.cn/problems/binary-tree-right-side-view/)
|
||||||
* 637.二叉树的层平均值
|
* [637.二叉树的层平均值](https://leetcode.cn/problems/binary-tree-right-side-view/)
|
||||||
* 429.N叉树的层序遍历
|
* [429.N叉树的层序遍历](https://leetcode.cn/problems/n-ary-tree-level-order-traversal/)
|
||||||
* 515.在每个树行中找最大值
|
* [515.在每个树行中找最大值](https://leetcode.cn/problems/find-largest-value-in-each-tree-row/)
|
||||||
* 116.填充每个节点的下一个右侧节点指针
|
* [116.填充每个节点的下一个右侧节点指针](https://leetcode.cn/problems/populating-next-right-pointers-in-each-node/)
|
||||||
* 117.填充每个节点的下一个右侧节点指针II
|
* [117.填充每个节点的下一个右侧节点指针II](https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/)
|
||||||
* 104.二叉树的最大深度
|
* [104.二叉树的最大深度](https://leetcode.cn/problems/maximum-depth-of-binary-tree/)
|
||||||
* 111.二叉树的最小深度
|
* [111.二叉树的最小深度](https://leetcode.cn/problems/minimum-depth-of-binary-tree/)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -31,7 +33,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 102.二叉树的层序遍历
|
## 102.二叉树的层序遍历
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode.cn/problems/binary-tree-level-order-traversal/)
|
[力扣题目链接](https://leetcode.cn/problems/binary-tree-level-order-traversal/)
|
||||||
|
|
||||||
@ -39,7 +41,7 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
思路:
|
### 思路
|
||||||
|
|
||||||
我们之前讲过了三篇关于二叉树的深度优先遍历的文章:
|
我们之前讲过了三篇关于二叉树的深度优先遍历的文章:
|
||||||
|
|
||||||
@ -63,7 +65,7 @@
|
|||||||
|
|
||||||
代码如下:**这份代码也可以作为二叉树层序遍历的模板,打十个就靠它了**。
|
代码如下:**这份代码也可以作为二叉树层序遍历的模板,打十个就靠它了**。
|
||||||
|
|
||||||
C++代码:
|
c++代码如下:
|
||||||
|
|
||||||
```CPP
|
```CPP
|
||||||
class Solution {
|
class Solution {
|
||||||
@ -111,7 +113,9 @@ public:
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
java:
|
### 其他语言版本
|
||||||
|
|
||||||
|
#### Java:
|
||||||
|
|
||||||
```Java
|
```Java
|
||||||
// 102.二叉树的层序遍历
|
// 102.二叉树的层序遍历
|
||||||
@ -167,7 +171,7 @@ class Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
python3代码:
|
#### Python:
|
||||||
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
@ -219,12 +223,9 @@ class Solution:
|
|||||||
self.helper(node.left, level + 1, levels)
|
self.helper(node.left, level + 1, levels)
|
||||||
self.helper(node.right, level + 1, levels)
|
self.helper(node.right, level + 1, levels)
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Go:
|
||||||
|
|
||||||
go:
|
|
||||||
|
|
||||||
```go
|
```go
|
||||||
/**
|
/**
|
||||||
@ -320,7 +321,7 @@ func levelOrder(root *TreeNode) (res [][]int) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
javascript代码:
|
#### Javascript:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var levelOrder = function(root) {
|
var levelOrder = function(root) {
|
||||||
@ -350,7 +351,7 @@ var levelOrder = function(root) {
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
TypeScript:
|
#### TypeScript:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
function levelOrder(root: TreeNode | null): number[][] {
|
function levelOrder(root: TreeNode | null): number[][] {
|
||||||
@ -377,7 +378,7 @@ function levelOrder(root: TreeNode | null): number[][] {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Swift:
|
#### Swift:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
func levelOrder(_ root: TreeNode?) -> [[Int]] {
|
func levelOrder(_ root: TreeNode?) -> [[Int]] {
|
||||||
@ -403,7 +404,7 @@ func levelOrder(_ root: TreeNode?) -> [[Int]] {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Scala:
|
#### Scala:
|
||||||
|
|
||||||
```scala
|
```scala
|
||||||
// 102.二叉树的层序遍历
|
// 102.二叉树的层序遍历
|
||||||
@ -430,7 +431,7 @@ object Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Rust:
|
#### Rust:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
@ -466,7 +467,7 @@ impl Solution {
|
|||||||
**此时我们就掌握了二叉树的层序遍历了,那么如下九道力扣上的题目,只需要修改模板的两三行代码(不能再多了),便可打倒!**
|
**此时我们就掌握了二叉树的层序遍历了,那么如下九道力扣上的题目,只需要修改模板的两三行代码(不能再多了),便可打倒!**
|
||||||
|
|
||||||
|
|
||||||
# 107.二叉树的层次遍历 II
|
## 107.二叉树的层次遍历 II
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/)
|
[力扣题目链接](https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/)
|
||||||
|
|
||||||
@ -474,7 +475,7 @@ impl Solution {
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
思路:
|
### 思路
|
||||||
|
|
||||||
相对于102.二叉树的层序遍历,就是最后把result数组反转一下就可以了。
|
相对于102.二叉树的层序遍历,就是最后把result数组反转一下就可以了。
|
||||||
|
|
||||||
@ -506,7 +507,9 @@ public:
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
python代码:
|
### 其他语言版本
|
||||||
|
|
||||||
|
#### Python:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
class Solution:
|
class Solution:
|
||||||
@ -537,7 +540,7 @@ class Solution:
|
|||||||
return result[::-1]
|
return result[::-1]
|
||||||
```
|
```
|
||||||
|
|
||||||
Java:
|
#### Java:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
// 107. 二叉树的层序遍历 II
|
// 107. 二叉树的层序遍历 II
|
||||||
@ -618,12 +621,10 @@ class Solution {
|
|||||||
|
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Go:
|
||||||
|
|
||||||
go:
|
|
||||||
|
|
||||||
```GO
|
```GO
|
||||||
/**
|
/**
|
||||||
@ -662,7 +663,7 @@ func levelOrderBottom(root *TreeNode) [][]int {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
javascript代码
|
#### Javascript:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var levelOrderBottom = function(root) {
|
var levelOrderBottom = function(root) {
|
||||||
@ -688,7 +689,7 @@ var levelOrderBottom = function(root) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
TypeScript:
|
#### TypeScript:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
function levelOrderBottom(root: TreeNode | null): number[][] {
|
function levelOrderBottom(root: TreeNode | null): number[][] {
|
||||||
@ -711,7 +712,7 @@ function levelOrderBottom(root: TreeNode | null): number[][] {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Swift:
|
#### Swift:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
func levelOrderBottom(_ root: TreeNode?) -> [[Int]] {
|
func levelOrderBottom(_ root: TreeNode?) -> [[Int]] {
|
||||||
@ -737,8 +738,7 @@ func levelOrderBottom(_ root: TreeNode?) -> [[Int]] {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Scala:
|
||||||
Scala:
|
|
||||||
|
|
||||||
```scala
|
```scala
|
||||||
// 107.二叉树的层次遍历II
|
// 107.二叉树的层次遍历II
|
||||||
@ -764,7 +764,10 @@ object Solution {
|
|||||||
res.reverse.toList
|
res.reverse.toList
|
||||||
}
|
}
|
||||||
|
|
||||||
Rust:
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Rust:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
@ -796,7 +799,7 @@ impl Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# 199.二叉树的右视图
|
## 199.二叉树的右视图
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode.cn/problems/binary-tree-right-side-view/)
|
[力扣题目链接](https://leetcode.cn/problems/binary-tree-right-side-view/)
|
||||||
|
|
||||||
@ -804,7 +807,7 @@ impl Solution {
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
思路:
|
### 思路
|
||||||
|
|
||||||
层序遍历的时候,判断是否遍历到单层的最后面的元素,如果是,就放进result数组中,随后返回result就可以了。
|
层序遍历的时候,判断是否遍历到单层的最后面的元素,如果是,就放进result数组中,随后返回result就可以了。
|
||||||
|
|
||||||
@ -832,7 +835,9 @@ public:
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
python代码:
|
### 其他语言版本
|
||||||
|
|
||||||
|
#### Python:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Definition for a binary tree node.
|
# Definition for a binary tree node.
|
||||||
@ -866,8 +871,7 @@ class Solution:
|
|||||||
return right_view
|
return right_view
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Java:
|
||||||
Java:
|
|
||||||
|
|
||||||
```java
|
```java
|
||||||
// 199.二叉树的右视图
|
// 199.二叉树的右视图
|
||||||
@ -911,7 +915,7 @@ public class N0199 {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
go:
|
#### Go:
|
||||||
|
|
||||||
```GO
|
```GO
|
||||||
/**
|
/**
|
||||||
@ -945,8 +949,7 @@ func rightSideView(root *TreeNode) []int {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Javascript:
|
||||||
javascript代码:
|
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var rightSideView = function(root) {
|
var rightSideView = function(root) {
|
||||||
@ -972,7 +975,7 @@ var rightSideView = function(root) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
TypeScript:
|
#### TypeScript:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
function rightSideView(root: TreeNode | null): number[] {
|
function rightSideView(root: TreeNode | null): number[] {
|
||||||
@ -992,7 +995,7 @@ function rightSideView(root: TreeNode | null): number[] {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Swift:
|
#### Swift:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
func rightSideView(_ root: TreeNode?) -> [Int] {
|
func rightSideView(_ root: TreeNode?) -> [Int] {
|
||||||
@ -1017,7 +1020,7 @@ func rightSideView(_ root: TreeNode?) -> [Int] {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Scala:
|
#### Scala:
|
||||||
|
|
||||||
```scala
|
```scala
|
||||||
// 199.二叉树的右视图
|
// 199.二叉树的右视图
|
||||||
@ -1043,7 +1046,7 @@ object Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
rust:
|
#### Rust:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
@ -1076,7 +1079,7 @@ impl Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# 637.二叉树的层平均值
|
## 637.二叉树的层平均值
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode.cn/problems/average-of-levels-in-binary-tree/)
|
[力扣题目链接](https://leetcode.cn/problems/average-of-levels-in-binary-tree/)
|
||||||
|
|
||||||
@ -1084,7 +1087,7 @@ impl Solution {
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
思路:
|
### 思路
|
||||||
|
|
||||||
本题就是层序遍历的时候把一层求个总和在取一个均值。
|
本题就是层序遍历的时候把一层求个总和在取一个均值。
|
||||||
|
|
||||||
@ -1115,7 +1118,9 @@ public:
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
python代码:
|
### 其他语言版本
|
||||||
|
|
||||||
|
#### Python:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
class Solution:
|
class Solution:
|
||||||
@ -1155,7 +1160,7 @@ class Solution:
|
|||||||
return averages
|
return averages
|
||||||
```
|
```
|
||||||
|
|
||||||
java:
|
#### Java:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
// 637. 二叉树的层平均值
|
// 637. 二叉树的层平均值
|
||||||
@ -1197,7 +1202,7 @@ public class N0637 {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
go:
|
#### Go:
|
||||||
|
|
||||||
```GO
|
```GO
|
||||||
/**
|
/**
|
||||||
@ -1235,7 +1240,7 @@ func averageOfLevels(root *TreeNode) []float64 {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
javascript代码:
|
#### Javascript:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var averageOfLevels = function(root) {
|
var averageOfLevels = function(root) {
|
||||||
@ -1262,7 +1267,7 @@ var averageOfLevels = function(root) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
TypeScript:
|
#### TypeScript:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
function averageOfLevels(root: TreeNode | null): number[] {
|
function averageOfLevels(root: TreeNode | null): number[] {
|
||||||
@ -1286,7 +1291,7 @@ function averageOfLevels(root: TreeNode | null): number[] {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Swift:
|
#### Swift:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
func averageOfLevels(_ root: TreeNode?) -> [Double] {
|
func averageOfLevels(_ root: TreeNode?) -> [Double] {
|
||||||
@ -1313,7 +1318,7 @@ func averageOfLevels(_ root: TreeNode?) -> [Double] {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Scala:
|
#### Scala:
|
||||||
|
|
||||||
```scala
|
```scala
|
||||||
// 637.二叉树的层平均值
|
// 637.二叉树的层平均值
|
||||||
@ -1339,7 +1344,7 @@ object Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
rust:
|
#### Rust:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
@ -1372,7 +1377,7 @@ impl Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# 429.N叉树的层序遍历
|
## 429.N叉树的层序遍历
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode.cn/problems/n-ary-tree-level-order-traversal/)
|
[力扣题目链接](https://leetcode.cn/problems/n-ary-tree-level-order-traversal/)
|
||||||
|
|
||||||
@ -1390,8 +1395,7 @@ impl Solution {
|
|||||||
[5,6]
|
[5,6]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
### 思路
|
||||||
思路:
|
|
||||||
|
|
||||||
这道题依旧是模板题,只不过一个节点有多个孩子了
|
这道题依旧是模板题,只不过一个节点有多个孩子了
|
||||||
|
|
||||||
@ -1423,7 +1427,9 @@ public:
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
python代码:
|
### 其他语言版本
|
||||||
|
|
||||||
|
#### Python:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
"""
|
"""
|
||||||
@ -1475,7 +1481,7 @@ class Solution:
|
|||||||
return result
|
return result
|
||||||
```
|
```
|
||||||
|
|
||||||
java:
|
#### Java:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
// 429. N 叉树的层序遍历
|
// 429. N 叉树的层序遍历
|
||||||
@ -1535,8 +1541,7 @@ public class N0429 {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Go:
|
||||||
go:
|
|
||||||
|
|
||||||
```GO
|
```GO
|
||||||
/**
|
/**
|
||||||
@ -1567,7 +1572,7 @@ func levelOrder(root *Node) [][]int {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
JavaScript代码:
|
#### JavaScript:
|
||||||
|
|
||||||
```JavaScript
|
```JavaScript
|
||||||
var levelOrder = function(root) {
|
var levelOrder = function(root) {
|
||||||
@ -1596,7 +1601,7 @@ var levelOrder = function(root) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
TypeScript:
|
#### TypeScript:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
function levelOrder(root: Node | null): number[][] {
|
function levelOrder(root: Node | null): number[][] {
|
||||||
@ -1618,7 +1623,7 @@ function levelOrder(root: Node | null): number[][] {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Swift:
|
#### Swift:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
func levelOrder(_ root: Node?) -> [[Int]] {
|
func levelOrder(_ root: Node?) -> [[Int]] {
|
||||||
@ -1643,7 +1648,7 @@ func levelOrder(_ root: Node?) -> [[Int]] {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Scala:
|
#### Scala:
|
||||||
|
|
||||||
```scala
|
```scala
|
||||||
// 429.N叉树的层序遍历
|
// 429.N叉树的层序遍历
|
||||||
@ -1672,7 +1677,7 @@ object Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
rust:
|
#### Rust:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
pub struct Solution;
|
pub struct Solution;
|
||||||
@ -1720,7 +1725,7 @@ impl Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# 515.在每个树行中找最大值
|
## 515.在每个树行中找最大值
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode.cn/problems/find-largest-value-in-each-tree-row/)
|
[力扣题目链接](https://leetcode.cn/problems/find-largest-value-in-each-tree-row/)
|
||||||
|
|
||||||
@ -1728,7 +1733,7 @@ impl Solution {
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
思路:
|
### 思路
|
||||||
|
|
||||||
层序遍历,取每一层的最大值
|
层序遍历,取每一层的最大值
|
||||||
|
|
||||||
@ -1758,7 +1763,9 @@ public:
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
python代码:
|
### 其他语言版本
|
||||||
|
|
||||||
|
#### Python:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Definition for a binary tree node.
|
# Definition for a binary tree node.
|
||||||
@ -1794,7 +1801,7 @@ class Solution:
|
|||||||
return result
|
return result
|
||||||
```
|
```
|
||||||
|
|
||||||
java代码:
|
#### Java:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
class Solution {
|
class Solution {
|
||||||
@ -1820,7 +1827,7 @@ class Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
go:
|
#### Go:
|
||||||
|
|
||||||
```GO
|
```GO
|
||||||
/**
|
/**
|
||||||
@ -1864,7 +1871,7 @@ func max(x, y int) int {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
javascript代码:
|
#### Javascript:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var largestValues = function(root) {
|
var largestValues = function(root) {
|
||||||
@ -1890,7 +1897,7 @@ var largestValues = function(root) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
TypeScript:
|
#### TypeScript:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
function largestValues(root: TreeNode | null): number[] {
|
function largestValues(root: TreeNode | null): number[] {
|
||||||
@ -1916,7 +1923,7 @@ function largestValues(root: TreeNode | null): number[] {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Swift:
|
#### Swift:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
func largestValues(_ root: TreeNode?) -> [Int] {
|
func largestValues(_ root: TreeNode?) -> [Int] {
|
||||||
@ -1943,7 +1950,7 @@ func largestValues(_ root: TreeNode?) -> [Int] {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Scala:
|
#### Scala:
|
||||||
|
|
||||||
```scala
|
```scala
|
||||||
// 515.在每个树行中找最大值
|
// 515.在每个树行中找最大值
|
||||||
@ -1970,7 +1977,7 @@ object Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
rust:
|
#### Rust:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
@ -2002,7 +2009,7 @@ impl Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# 116.填充每个节点的下一个右侧节点指针
|
## 116.填充每个节点的下一个右侧节点指针
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode.cn/problems/populating-next-right-pointers-in-each-node/)
|
[力扣题目链接](https://leetcode.cn/problems/populating-next-right-pointers-in-each-node/)
|
||||||
|
|
||||||
@ -2024,7 +2031,7 @@ struct Node {
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
思路:
|
### 思路
|
||||||
|
|
||||||
本题依然是层序遍历,只不过在单层遍历的时候记录一下本层的头部节点,然后在遍历的时候让前一个节点指向本节点就可以了
|
本题依然是层序遍历,只不过在单层遍历的时候记录一下本层的头部节点,然后在遍历的时候让前一个节点指向本节点就可以了
|
||||||
|
|
||||||
@ -2063,7 +2070,9 @@ public:
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
java代码:
|
### 其他语言版本
|
||||||
|
|
||||||
|
#### Java:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
class Solution {
|
class Solution {
|
||||||
@ -2093,7 +2102,7 @@ class Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
python代码:
|
#### Python:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
"""
|
"""
|
||||||
@ -2133,7 +2142,7 @@ class Solution:
|
|||||||
return root
|
return root
|
||||||
```
|
```
|
||||||
|
|
||||||
go:
|
#### Go:
|
||||||
|
|
||||||
```GO
|
```GO
|
||||||
/**
|
/**
|
||||||
@ -2173,7 +2182,7 @@ func connect(root *Node) *Node {
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
JavaScript:
|
#### JavaScript:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
/**
|
/**
|
||||||
@ -2209,7 +2218,7 @@ var connect = function(root) {
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
TypeScript:
|
#### TypeScript:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
function connect(root: Node | null): Node | null {
|
function connect(root: Node | null): Node | null {
|
||||||
@ -2234,7 +2243,7 @@ function connect(root: Node | null): Node | null {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Swift:
|
#### Swift:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
func connect(_ root: Node?) -> Node? {
|
func connect(_ root: Node?) -> Node? {
|
||||||
@ -2266,7 +2275,7 @@ func connect(_ root: Node?) -> Node? {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Scala:
|
#### Scala:
|
||||||
|
|
||||||
```scala
|
```scala
|
||||||
// 116.填充每个节点的下一个右侧节点指针
|
// 116.填充每个节点的下一个右侧节点指针
|
||||||
@ -2297,11 +2306,11 @@ object Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# 117.填充每个节点的下一个右侧节点指针II
|
## 117.填充每个节点的下一个右侧节点指针II
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/)
|
[力扣题目链接](https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/)
|
||||||
|
|
||||||
思路:
|
### 思路
|
||||||
|
|
||||||
这道题目说是二叉树,但116题目说是完整二叉树,其实没有任何差别,一样的代码一样的逻辑一样的味道
|
这道题目说是二叉树,但116题目说是完整二叉树,其实没有任何差别,一样的代码一样的逻辑一样的味道
|
||||||
|
|
||||||
@ -2339,7 +2348,9 @@ public:
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Java 代码:
|
### 其他语言版本
|
||||||
|
|
||||||
|
#### Java:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
// 二叉树之层次遍历
|
// 二叉树之层次遍历
|
||||||
@ -2377,7 +2388,7 @@ class Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
python代码:
|
#### Python:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# 层序遍历解法
|
# 层序遍历解法
|
||||||
@ -2420,7 +2431,7 @@ class Solution:
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
go:
|
#### Go:
|
||||||
|
|
||||||
```GO
|
```GO
|
||||||
/**
|
/**
|
||||||
@ -2459,7 +2470,7 @@ func connect(root *Node) *Node {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
JavaScript:
|
#### JavaScript:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
/**
|
/**
|
||||||
@ -2494,7 +2505,7 @@ var connect = function(root) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
TypeScript:
|
#### TypeScript:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
function connect(root: Node | null): Node | null {
|
function connect(root: Node | null): Node | null {
|
||||||
@ -2519,7 +2530,7 @@ function connect(root: Node | null): Node | null {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Swift:
|
#### Swift:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
func connect(_ root: Node?) -> Node? {
|
func connect(_ root: Node?) -> Node? {
|
||||||
@ -2551,7 +2562,7 @@ func connect(_ root: Node?) -> Node? {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Scala:
|
#### Scala:
|
||||||
|
|
||||||
```scala
|
```scala
|
||||||
// 117.填充每个节点的下一个右侧节点指针II
|
// 117.填充每个节点的下一个右侧节点指针II
|
||||||
@ -2582,7 +2593,7 @@ object Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# 104.二叉树的最大深度
|
## 104.二叉树的最大深度
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode.cn/problems/maximum-depth-of-binary-tree/)
|
[力扣题目链接](https://leetcode.cn/problems/maximum-depth-of-binary-tree/)
|
||||||
|
|
||||||
@ -2600,7 +2611,7 @@ object Solution {
|
|||||||
|
|
||||||
返回它的最大深度 3 。
|
返回它的最大深度 3 。
|
||||||
|
|
||||||
思路:
|
### 思路
|
||||||
|
|
||||||
使用迭代法的话,使用层序遍历是最为合适的,因为最大的深度就是二叉树的层数,和层序遍历的方式极其吻合。
|
使用迭代法的话,使用层序遍历是最为合适的,因为最大的深度就是二叉树的层数,和层序遍历的方式极其吻合。
|
||||||
|
|
||||||
@ -2635,7 +2646,9 @@ public:
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Java:
|
### 其他语言版本
|
||||||
|
|
||||||
|
#### Java:
|
||||||
|
|
||||||
```Java
|
```Java
|
||||||
class Solution {
|
class Solution {
|
||||||
@ -2661,7 +2674,7 @@ class Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Python:
|
#### Python:
|
||||||
|
|
||||||
```python 3
|
```python 3
|
||||||
# Definition for a binary tree node.
|
# Definition for a binary tree node.
|
||||||
@ -2691,7 +2704,7 @@ class Solution:
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Go:
|
#### Go:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
/**
|
/**
|
||||||
@ -2726,7 +2739,7 @@ func maxDepth(root *TreeNode) int {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
JavaScript:
|
#### JavaScript:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
/**
|
/**
|
||||||
@ -2759,7 +2772,7 @@ var maxDepth = function(root) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
TypeScript:
|
#### TypeScript:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
function maxDepth(root: TreeNode | null): number {
|
function maxDepth(root: TreeNode | null): number {
|
||||||
@ -2779,7 +2792,7 @@ function maxDepth(root: TreeNode | null): number {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Swift:
|
#### Swift:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
func maxDepth(_ root: TreeNode?) -> Int {
|
func maxDepth(_ root: TreeNode?) -> Int {
|
||||||
@ -2804,7 +2817,7 @@ func maxDepth(_ root: TreeNode?) -> Int {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Scala:
|
#### Scala:
|
||||||
|
|
||||||
```scala
|
```scala
|
||||||
// 104.二叉树的最大深度
|
// 104.二叉树的最大深度
|
||||||
@ -2829,7 +2842,7 @@ object Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
rust:
|
#### Rust:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
@ -2859,10 +2872,12 @@ impl Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# 111.二叉树的最小深度
|
## 111.二叉树的最小深度
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode.cn/problems/minimum-depth-of-binary-tree/)
|
[力扣题目链接](https://leetcode.cn/problems/minimum-depth-of-binary-tree/)
|
||||||
|
|
||||||
|
### 思路
|
||||||
|
|
||||||
相对于 104.二叉树的最大深度 ,本题还也可以使用层序遍历的方式来解决,思路是一样的。
|
相对于 104.二叉树的最大深度 ,本题还也可以使用层序遍历的方式来解决,思路是一样的。
|
||||||
|
|
||||||
**需要注意的是,只有当左右孩子都为空的时候,才说明遍历的最低点了。如果其中一个孩子为空则不是最低点**
|
**需要注意的是,只有当左右孩子都为空的时候,才说明遍历的最低点了。如果其中一个孩子为空则不是最低点**
|
||||||
@ -2895,7 +2910,9 @@ public:
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Java:
|
### 其他语言版本
|
||||||
|
|
||||||
|
#### Java:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
class Solution {
|
class Solution {
|
||||||
@ -2925,9 +2942,7 @@ class Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Python:
|
||||||
|
|
||||||
Python 3:
|
|
||||||
|
|
||||||
```python 3
|
```python 3
|
||||||
# Definition for a binary tree node.
|
# Definition for a binary tree node.
|
||||||
@ -2960,7 +2975,7 @@ class Solution:
|
|||||||
return depth
|
return depth
|
||||||
```
|
```
|
||||||
|
|
||||||
Go:
|
#### Go:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
/**
|
/**
|
||||||
@ -2999,7 +3014,7 @@ func minDepth(root *TreeNode) int {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
JavaScript:
|
#### JavaScript:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
/**
|
/**
|
||||||
@ -3035,7 +3050,7 @@ var minDepth = function(root) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
TypeScript:
|
#### TypeScript:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
function minDepth(root: TreeNode | null): number {
|
function minDepth(root: TreeNode | null): number {
|
||||||
@ -3056,7 +3071,7 @@ function minDepth(root: TreeNode | null): number {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Swift:
|
#### Swift:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
func minDepth(_ root: TreeNode?) -> Int {
|
func minDepth(_ root: TreeNode?) -> Int {
|
||||||
@ -3082,7 +3097,7 @@ func minDepth(_ root: TreeNode?) -> Int {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Scala:
|
#### Scala:
|
||||||
|
|
||||||
```scala
|
```scala
|
||||||
// 111.二叉树的最小深度
|
// 111.二叉树的最小深度
|
||||||
@ -3108,7 +3123,7 @@ object Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
rust:
|
#### Rust:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
@ -3141,28 +3156,27 @@ impl Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# 总结
|
## 总结
|
||||||
|
|
||||||
二叉树的层序遍历,**就是图论中的广度优先搜索在二叉树中的应用**,需要借助队列来实现(此时又发现队列的一个应用了)。
|
二叉树的层序遍历,**就是图论中的广度优先搜索在二叉树中的应用**,需要借助队列来实现(此时又发现队列的一个应用了)。
|
||||||
|
|
||||||
来吧,一口气打十个:
|
来吧,一口气打十个:
|
||||||
|
|
||||||
* 102.二叉树的层序遍历
|
* [102.二叉树的层序遍历](https://leetcode.cn/problems/binary-tree-level-order-traversal/)
|
||||||
* 107.二叉树的层次遍历II
|
* [107.二叉树的层次遍历II](https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/)
|
||||||
* 199.二叉树的右视图
|
* [199.二叉树的右视图](https://leetcode.cn/problems/binary-tree-right-side-view/)
|
||||||
* 637.二叉树的层平均值
|
* [637.二叉树的层平均值](https://leetcode.cn/problems/binary-tree-right-side-view/)
|
||||||
* 429.N叉树的层序遍历
|
* [429.N叉树的层序遍历](https://leetcode.cn/problems/n-ary-tree-level-order-traversal/)
|
||||||
* 515.在每个树行中找最大值
|
* [515.在每个树行中找最大值](https://leetcode.cn/problems/find-largest-value-in-each-tree-row/)
|
||||||
* 116.填充每个节点的下一个右侧节点指针
|
* [116.填充每个节点的下一个右侧节点指针](https://leetcode.cn/problems/populating-next-right-pointers-in-each-node/)
|
||||||
* 117.填充每个节点的下一个右侧节点指针II
|
* [117.填充每个节点的下一个右侧节点指针II](https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/)
|
||||||
* 104.二叉树的最大深度
|
* [104.二叉树的最大深度](https://leetcode.cn/problems/maximum-depth-of-binary-tree/)
|
||||||
* 111.二叉树的最小深度
|
* [111.二叉树的最小深度](https://leetcode.cn/problems/minimum-depth-of-binary-tree/)
|
||||||
|
|
||||||
**致敬叶师傅!**
|
**致敬叶师傅!**
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
|
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
|
||||||
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
|
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user