mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
更新 0222.完全二叉树的节点个数 排版格式修复
This commit is contained in:
@ -29,14 +29,17 @@
|
|||||||
* 0 <= Node.val <= 5 * 10^4
|
* 0 <= Node.val <= 5 * 10^4
|
||||||
* 题目数据保证输入的树是 完全二叉树
|
* 题目数据保证输入的树是 完全二叉树
|
||||||
|
|
||||||
|
## 算法公开课
|
||||||
|
|
||||||
# 思路
|
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[要理解普通二叉树和完全二叉树的区别! | LeetCode:222.完全二叉树节点的数量](https://www.bilibili.com/video/BV1eW4y1B7pD),相信结合视频再看本篇题解,更有助于大家对本题的理解**。
|
||||||
|
|
||||||
|
|
||||||
|
## 思路
|
||||||
|
|
||||||
《代码随想录》算法视频公开课:[要理解普通二叉树和完全二叉树的区别! | LeetCode:222.完全二叉树节点的数量](https://www.bilibili.com/video/BV1eW4y1B7pD),相信结合视频在看本篇题解,更有助于大家对本题的理解。
|
|
||||||
|
|
||||||
本篇给出按照普通二叉树的求法以及利用完全二叉树性质的求法。
|
本篇给出按照普通二叉树的求法以及利用完全二叉树性质的求法。
|
||||||
|
|
||||||
## 普通二叉树
|
### 普通二叉树
|
||||||
|
|
||||||
首先按照普通二叉树的逻辑来求。
|
首先按照普通二叉树的逻辑来求。
|
||||||
|
|
||||||
@ -44,7 +47,7 @@
|
|||||||
|
|
||||||
递归遍历的顺序依然是后序(左右中)。
|
递归遍历的顺序依然是后序(左右中)。
|
||||||
|
|
||||||
### 递归
|
#### 递归
|
||||||
|
|
||||||
如果对求二叉树深度还不熟悉的话,看这篇:[二叉树:看看这些树的最大深度](https://programmercarl.com/0104.二叉树的最大深度.html)。
|
如果对求二叉树深度还不熟悉的话,看这篇:[二叉树:看看这些树的最大深度](https://programmercarl.com/0104.二叉树的最大深度.html)。
|
||||||
|
|
||||||
@ -112,7 +115,7 @@ public:
|
|||||||
**网上基本都是这个精简的代码版本,其实不建议大家照着这个来写,代码确实精简,但隐藏了一些内容,连遍历的顺序都看不出来,所以初学者建议学习版本一的代码,稳稳的打基础**。
|
**网上基本都是这个精简的代码版本,其实不建议大家照着这个来写,代码确实精简,但隐藏了一些内容,连遍历的顺序都看不出来,所以初学者建议学习版本一的代码,稳稳的打基础**。
|
||||||
|
|
||||||
|
|
||||||
### 迭代法
|
#### 迭代
|
||||||
|
|
||||||
如果对求二叉树层序遍历还不熟悉的话,看这篇:[二叉树:层序遍历登场!](https://programmercarl.com/0102.二叉树的层序遍历.html)。
|
如果对求二叉树层序遍历还不熟悉的话,看这篇:[二叉树:层序遍历登场!](https://programmercarl.com/0102.二叉树的层序遍历.html)。
|
||||||
|
|
||||||
@ -142,7 +145,7 @@ public:
|
|||||||
* 时间复杂度:O(n)
|
* 时间复杂度:O(n)
|
||||||
* 空间复杂度:O(n)
|
* 空间复杂度:O(n)
|
||||||
|
|
||||||
## 完全二叉树
|
### 完全二叉树
|
||||||
|
|
||||||
以上方法都是按照普通二叉树来做的,对于完全二叉树特性不了解的同学可以看这篇 [关于二叉树,你该了解这些!](https://programmercarl.com/二叉树理论基础.html),这篇详细介绍了各种二叉树的特性。
|
以上方法都是按照普通二叉树来做的,对于完全二叉树特性不了解的同学可以看这篇 [关于二叉树,你该了解这些!](https://programmercarl.com/二叉树理论基础.html),这篇详细介绍了各种二叉树的特性。
|
||||||
|
|
||||||
@ -249,9 +252,9 @@ public:
|
|||||||
* 时间复杂度:O(log n × log n)
|
* 时间复杂度:O(log n × log n)
|
||||||
* 空间复杂度:O(log n)
|
* 空间复杂度:O(log n)
|
||||||
|
|
||||||
# 其他语言版本
|
## 其他语言版本
|
||||||
|
|
||||||
## Java
|
### Java:
|
||||||
```java
|
```java
|
||||||
class Solution {
|
class Solution {
|
||||||
// 通用递归解法
|
// 通用递归解法
|
||||||
@ -312,7 +315,7 @@ class Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Python
|
### Python:
|
||||||
|
|
||||||
递归法:
|
递归法:
|
||||||
```python
|
```python
|
||||||
@ -408,7 +411,7 @@ class Solution: # 利用完全二叉树特性
|
|||||||
return 1+self.countNodes(root.left)+self.countNodes(root.right)
|
return 1+self.countNodes(root.left)+self.countNodes(root.right)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Go
|
### Go:
|
||||||
|
|
||||||
递归版本
|
递归版本
|
||||||
|
|
||||||
@ -488,9 +491,7 @@ func countNodes(root *TreeNode) int {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### JavaScript:
|
||||||
|
|
||||||
## JavaScript:
|
|
||||||
|
|
||||||
递归版本
|
递归版本
|
||||||
```javascript
|
```javascript
|
||||||
@ -559,7 +560,7 @@ var countNodes = function(root) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
## TypeScrpt:
|
### TypeScrpt:
|
||||||
|
|
||||||
> 递归法
|
> 递归法
|
||||||
|
|
||||||
@ -614,7 +615,7 @@ function countNodes(root: TreeNode | null): number {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
## C:
|
### C:
|
||||||
|
|
||||||
递归法
|
递归法
|
||||||
```c
|
```c
|
||||||
@ -690,7 +691,7 @@ int countNodes(struct TreeNode* root){
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Swift:
|
### Swift:
|
||||||
|
|
||||||
> 递归
|
> 递归
|
||||||
```swift
|
```swift
|
||||||
@ -758,7 +759,7 @@ func countNodes(_ root: TreeNode?) -> Int {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Scala
|
### Scala:
|
||||||
|
|
||||||
递归:
|
递归:
|
||||||
```scala
|
```scala
|
||||||
@ -821,9 +822,9 @@ object Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
rust:
|
### Rust:
|
||||||
|
|
||||||
// 递归
|
递归
|
||||||
```rust
|
```rust
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
@ -838,7 +839,7 @@ impl Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
// 迭代
|
迭代
|
||||||
```rust
|
```rust
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
|
Reference in New Issue
Block a user