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++実装
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;
    }