当前位置:网站首页>leetcode: 102. 二叉树的层序遍历
leetcode: 102. 二叉树的层序遍历
2022-07-26 03:39:00 【uncle_ll】
102. 二叉树的层序遍历
来源:力扣(LeetCode)
链接: https://leetcode.cn/problems/binary-tree-level-order-traversal/
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
提示:
树中节点数目在范围 [0, 2000] 内
-1000 <= Node.val <= 1000
解法
- 递归: 给定的node以及层,判断层数是否与结果的长度相同,如果是相同,说明该node应该放入该层中,注意是从第0层开始。
- BFS:层序遍历,使用一个列表维持当前层的节点。当前层的长度来控制遍历的次数,如果有左右子节点,将其加到列表中;
代码实现
递归
python实现
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
levels = []
def helper(node, level):
if len(levels) == level:
levels.append([])
levels[level].append(node.val)
if node.left:
helper(node.left, level+1)
if node.right:
helper(node.right, level+1)
helper(root, 0)
return levels
c++实现
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */
class Solution {
vector<vector<int>> res;
public:
void helper(TreeNode* node, int level) {
if (res.size() == level)
res.push_back({
});
res[level].push_back(node->val);
if (node->left)
helper(node->left, level+1);
if (node->right)
helper(node->right, level+1);
}
vector<vector<int>> levelOrder(TreeNode* root) {
if (root == nullptr)
return res;
helper(root, 0);
return res;
}
};
复杂度分析
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)
BFS
python实现
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
# bfs
if not root:
return []
queue = []
res = []
queue.append(root)
while queue:
level_res = []
for i in range(len(queue)):
node = queue.pop(0)
level_res.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
res.append(level_res)
return res
c++实现
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if (root == nullptr)
return {
};
queue<TreeNode*> q;
vector<vector<int>> res;
q.push(root);
while (q.size() != 0) {
vector<int> tmp;
int level_wide = q.size();
for(int i=0; i<level_wide; i++) {
TreeNode* node = q.front();
q.pop();
tmp.push_back(node->val);
if(node->left != nullptr)
q.push(node->left);
if (node->right != nullptr)
q.push(node->right);
}
res.push_back(tmp);
}
return res;
}
};
复杂度分析
- 时间复杂度: O ( n ) O(n) O(n) , 每个点进队出队各一次,故渐进时间复杂度为 O(n)
- 空间复杂度: O ( n ) O(n) O(n), 队列中元素的个数不超过 n 个,故渐进空间复杂度为 O(n)
边栏推荐
- Uncaught TypeError: $(...).onmouseenter is not a function js错误,解决办法:
- Leetcode-462. make the array elements equal with the minimum number of moves
- IDEA2020.3.1不能打开(双击不能打开),但可以通过idea.bat打开。
- 【虚拟化】查看vCenter和ESXi主机的Log日志文件
- tf.truncated_normal()用法
- PXE高效批量网络装机
- Why are more and more users of Bing search?
- Visio: how do Gantt charts merge cells? Solution: overwrite cells
- ELS message loop
- 某大厂开发和测试干了一架,还用鼠标线勒脖子...
猜你喜欢

The convolution kernel is expanded to 51x51, and the new CNN architecture slak counterattacks the transformer

Completion report of communication software development and Application

easyExcel设置行隐藏,解决setHidden(true)失效问题

Summary of basic knowledge of C language pointer (I)

Dominate the salary list! What industry has a "money" path?

多商户商城系统功能拆解15讲-平台端会员标签

c语言指针基本知识要点总结(一)

ue4如何进行静态渲染?5个步骤生成静态渲染

括号嵌套问题(建议收藏)

Uncaught TypeError: $(...).onmouseenter is not a function js错误,解决办法:
随机推荐
PXE高效批量网络装机
ue4如何进行静态渲染?5个步骤生成静态渲染
QT笔记——临时的悬浮窗口
[experience sharing] strong recommendation - screenshot gadget FastStone capture (FSC)
Docker installs redis!!! (including detailed illustration of each step) actual combat
Derivation of linear regression principle
Moco V2: further upgrade of Moco series
Looking at the next step of BAIC bluevale through the 8billion fund-raising, product upgrading and building core capabilities are the key words
让百度收录,爬虫自己网站
Opencv annotates the image (picture frame + writing)
基本折线图:最直观呈现数据的趋势和变化
ext4、ntfs、xfs、btrfs、zfs、f2fs和reiserFS性能对比
2022-07-21 第四小组 修身课 学习笔记(every day)
tf.constant用法
LoRa和NB-IOT可用用在哪些地方
oracle 11g “密码延迟验证”特性
Div setting height does not take effect
全校软硬件基础设施一站式监控 ,苏州大学以时序数据库替换 PostgreSQL
Multi merchant mall system function disassembly lecture 15 - platform side member label
C语言函数(2)