102. Binary Tree Level Order Traversal

Medium的题开始上强度了,需要看答案才能想出解决方法了。但是看懂答案再去模仿何尝不是一种学习的方法呢

请看题

Example

思路

Medium类型的题目。看答案再想思路。

题目要求使用层次遍历,那么层次遍历需要用到queue。基于这个queue再去想其他的方法。

回到代码上,首先定义了双重vector作为答案返回,其值需在循环中更新。

首先还是熟悉的如果传入的树为空直接返回答案,这一步骤是我刷了好多题后的出来的结论嘿嘿

那么在if的后面就要更上本题的核心代码了,使用一个queue然后直接把树push进去。

开头一个while循环,条件为如果queue不为空就一直循环,进入循环后,先把queue的大小给获取然后再定义一个vector用来表示双重vector中的第二个vector。

根据queue大小来进行层次遍历,也就是熟悉的for循环。进入for循环后,首先要获取到根节点,然后删除queue容器中的根节点。这一步直接决定了层次遍历的基本。

如果获取到的根节点含有左右节点,那么更新quene容器,否则直接往我们的第二个vector中添加答案,因为这个获取的答案是没有左右节点的,是符合层次遍历的条件的。一直循环,直到容器为空结束。
最后要再结束钱push_back()到的我们的最终答案内,进行返回,提交,一气呵成!


Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
/**
* 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) {
vector<vector<int>> result;
if(!root){ return result; }
queue<TreeNode*> q;
q.push(root);
while(!q.empty())
{
int size = q.size();
vector<int> v;
for(size_t i = 0; i < size; i++)
{
TreeNode *node = q.front();
q.pop();
if(node->left) { q.push(node->left); }
if(node->right) { q.push(node->right) ;}
v.push_back(node->val);
}
result.push_back(v);
}
return result;
}
};

Medium题还是有点难度的啊


结束。


102. Binary Tree Level Order Traversal
http://example.com/2024/06/04/102. Binary Tree Level Order Traversal/
作者
OneWhiteThree
发布于
2024年6月4日
许可协议