Skip to content

Commit

Permalink
102.binary-tree-level-order-traversal: add C++ implementation (azl397…
Browse files Browse the repository at this point in the history
  • Loading branch information
raof01 authored and azl397985856 committed Jun 5, 2019
1 parent e0d8b2a commit b4ca8f4
Showing 1 changed file with 65 additions and 0 deletions.
65 changes: 65 additions & 0 deletions problems/102.binary-tree-level-order-traversal.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ return its level order traversal as:

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

如果不入队特殊元素Null来表示每层的结束,则在while循环开始时保存当前队列的长度,以保证每次只遍历一层(参考下面的C++ Code)。

> 如果采用递归方式,则需要将当前节点,当前所在的level以及结果数组传递给递归函数。在递归函数中,取出节点的值,添加到level参数对应结果数组元素中(参考下面的C++ Code)。

## 关键点解析

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


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

Javascript Code:
```js
/*
* @lc app=leetcode id=102 lang=javascript
Expand Down Expand Up @@ -123,7 +129,66 @@ var levelOrder = function(root) {

return items;
};

```
C++ Code:
```C++
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/

// 迭代
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
auto ret = vector<vector<int>>();
if (root == nullptr) return ret;
auto q = vector<TreeNode*>();
q.push_back(root);
auto level = 0;
while (!q.empty())
{
auto sz = q.size();
ret.push_back(vector<int>());
for (auto i = 0; i < sz; ++i)
{
auto t = q.front();
q.erase(q.begin());
ret[level].push_back(t->val);
if (t->left != nullptr) q.push_back(t->left);
if (t->right != nullptr) q.push_back(t->right);
}
++level;
}
return ret;
}
};

// 递归
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> v;
levelOrder(root, 0, v);
return v;
}
private:
void levelOrder(TreeNode* root, int level, vector<vector<int>>& v) {
if (root == NULL) return;
if (v.size() < level + 1) v.resize(level + 1);
v[level].push_back(root->val);
levelOrder(root->left, level + 1, v);
levelOrder(root->right, level + 1, v);
}
};
```
## 相关题目
- [103.binary-tree-zigzag-level-order-traversal](./103.binary-tree-zigzag-level-order-traversal.md)
- [104.maximum-depth-of-binary-tree](./104.maximum-depth-of-binary-tree.md)

0 comments on commit b4ca8f4

Please sign in to comment.