leetcode-102。階層的バイナリツリートラバーサル
前のエラーコードを変更します
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
queue<TreeNode*> LL;
queue<TreeNode*> RR;
int lev=0;
if(root) LL.push(root);
while(!LL.empty()||!RR.empty()){
if(!LL.empty()){
while(!LL.empty()){
TreeNode* tmp=LL.front();
LL.pop();
res[lev].push_back(tmp->val);
if(tmp->left) RR.push(tmp->left);
if(tmp->right) RR.push(tmp->right);
}
lev++;
}
else if(!RR.empty()){
while(!RR.empty()){
TreeNode* tmp=RR.front();
RR.pop();
res[lev].push_back(tmp->val);
if(tmp->left) LL.push(tmp->left);
if(tmp->right) LL.push(tmp->right);
}
lev++;
}
}
return res;
}
};
思想の問題解決:単一のキュー、別のキューに下の左と右のサブツリーと、それぞれを横断。
原因:ベクターを使用して不規則なアレイは、RESは、内側層を使用することができない、外側の層は、ベクターに挿入されていないベクトル<ベクトル<>>タイプ、です。以下を参照してください。
if(){
while(){
```
res[lev].push_back(tmp->val);
```
}
lev++;
}
次のように改正:最初の一時的なベクトル変数に格納された結果を通じて、最後に保存。以下を参照してください。
if(){
vector<int> r;
while(){
```
r.push_back(tmp->val);
```
}
res.push_back(r);
}
ACは、コードを変更し:
/** * 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) {
vector<vector<int>> res;
queue<TreeNode*> LL;
queue<TreeNode*> RR;
if(root) LL.push(root);
while(!LL.empty()||!RR.empty()){
if(!LL.empty()){
vector<int> r;
while(!LL.empty()){
TreeNode* tmp=LL.front();
LL.pop();
r.push_back(tmp->val);
if(tmp->left) RR.push(tmp->left);
if(tmp->right) RR.push(tmp->right);
}
res.push_back(r);
}
else if(!RR.empty()){
vector<int> r;
while(!RR.empty()){
TreeNode* tmp=RR.front();
RR.pop();
r.push_back(tmp->val);
if(tmp->left) LL.push(tmp->left);
if(tmp->right) LL.push(tmp->right);
}
res.push_back(r);
}
}
return res;
}
};
他のブログを参照し、より多くの問題(推奨チェックを)言及しました。
空の入力[] 1.を解決することはできません。
2.vectorアレイ初期化エラー、範囲外のコード。