Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b4ca8f4

Browse files
raof01azl397985856
authored andcommitted
102.binary-tree-level-order-traversal: add C++ implementation (azl397985856#22)
1 parent e0d8b2a commit b4ca8f4

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

‎problems/102.binary-tree-level-order-traversal.md‎

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ return its level order traversal as:
3030

3131
然后不断的出队, 如果出队的是null,则表式这一层已经结束了,我们就继续push一个null。
3232

33+
如果不入队特殊元素Null来表示每层的结束,则在while循环开始时保存当前队列的长度,以保证每次只遍历一层(参考下面的C++ Code)。
34+
35+
> 如果采用递归方式,则需要将当前节点,当前所在的level以及结果数组传递给递归函数。在递归函数中,取出节点的值,添加到level参数对应结果数组元素中(参考下面的C++ Code)。
36+
3337

3438
## 关键点解析
3539

@@ -43,7 +47,9 @@ return its level order traversal as:
4347

4448

4549
## 代码
50+
* 语言支持:JS,C++
4651

52+
Javascript Code:
4753
```js
4854
/*
4955
* @lc app=leetcode id=102 lang=javascript
@@ -123,7 +129,66 @@ var levelOrder = function(root) {
123129

124130
return items;
125131
};
132+
133+
```
134+
C++ Code:
135+
```C++
136+
/**
137+
* Definition for a binary tree node.
138+
* struct TreeNode {
139+
* int val;
140+
* TreeNode *left;
141+
* TreeNode *right;
142+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
143+
* };
144+
*/
145+
146+
// 迭代
147+
class Solution {
148+
public:
149+
vector<vector<int>> levelOrder(TreeNode* root) {
150+
auto ret = vector<vector<int>>();
151+
if (root == nullptr) return ret;
152+
auto q = vector<TreeNode*>();
153+
q.push_back(root);
154+
auto level = 0;
155+
while (!q.empty())
156+
{
157+
auto sz = q.size();
158+
ret.push_back(vector<int>());
159+
for (auto i = 0; i < sz; ++i)
160+
{
161+
auto t = q.front();
162+
q.erase(q.begin());
163+
ret[level].push_back(t->val);
164+
if (t->left != nullptr) q.push_back(t->left);
165+
if (t->right != nullptr) q.push_back(t->right);
166+
}
167+
++level;
168+
}
169+
return ret;
170+
}
171+
};
172+
173+
// 递归
174+
class Solution {
175+
public:
176+
vector<vector<int>> levelOrder(TreeNode* root) {
177+
vector<vector<int>> v;
178+
levelOrder(root, 0, v);
179+
return v;
180+
}
181+
private:
182+
void levelOrder(TreeNode* root, int level, vector<vector<int>>& v) {
183+
if (root == NULL) return;
184+
if (v.size() < level + 1) v.resize(level + 1);
185+
v[level].push_back(root->val);
186+
levelOrder(root->left, level + 1, v);
187+
levelOrder(root->right, level + 1, v);
188+
}
189+
};
126190
```
191+
127192
## 相关题目
128193
- [103.binary-tree-zigzag-level-order-traversal](./103.binary-tree-zigzag-level-order-traversal.md)
129194
- [104.maximum-depth-of-binary-tree](./104.maximum-depth-of-binary-tree.md)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /