Binary Tree Level Order Traversal C++題解
2512 ワード
題意説明
Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).
For example:Given binary tree{3,9,20,#,#,15,7},3/9 20/15 7 return its level order traversal:[[3],[9,20],[15,7]]は二叉木を与え,この二叉木の層序遍歴結果を出力し,この層序遍歴の結果は層別に区分される
構想分析:
キューを使用してツリーの階層ループを実現します.2つのキューcurrentとnextを維持します.currentは現在の階層のノードです.nextは次の階層のノードです.同時に2つのコンテナlevelとresultを開きます.levelは現在の階層のノードの値です.resultはループ結果です.currentが空でない場合、キューの最初のノードをポップアップし、その点の値をlevelの最後に入れます.ノードの左の息子と右の息子をnextキューに追加します.currentが空の場合、レイヤループが終了し、levelをresultに追加し、levelを空にし、currentをnextと交換します.nextも空の場合、ループが終了し、resultに戻ることを意味します.
C++実装
Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).
For example:Given binary tree{3,9,20,#,#,15,7},3/9 20/15 7 return its level order traversal:[[3],[9,20],[15,7]]は二叉木を与え,この二叉木の層序遍歴結果を出力し,この層序遍歴の結果は層別に区分される
構想分析:
キューを使用してツリーの階層ループを実現します.2つのキューcurrentとnextを維持します.currentは現在の階層のノードです.nextは次の階層のノードです.同時に2つのコンテナlevelとresultを開きます.levelは現在の階層のノードの値です.resultはループ結果です.currentが空でない場合、キューの最初のノードをポップアップし、その点の値をlevelの最後に入れます.ノードの左の息子と右の息子をnextキューに追加します.currentが空の場合、レイヤループが終了し、levelをresultに追加し、levelを空にし、currentをnextと交換します.nextも空の場合、ループが終了し、resultに戻ることを意味します.
C++実装
class Solution {
public:
vector<vector<int> > levelOrder(TreeNode *root)
{
std::vector<vector<int> > result;
if(root==nullptr) return result;
std::vector<int> level;
queue<TreeNode *> current,next;
current.push(root);
while(!current.empty())
{
while(!current.empty())
{
TreeNode *node=current.front();
current.pop();
level.push_back(node->val);
if(node->left!=nullptr) next.push(node->left);
if(node->right!=nullptr) next.push(node->right);
}
result.push_back(level);
level.clear();
swap(current,next);
}
return result;
}