[N叉树]leetocde429:N叉树的层序遍历(easy)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43152052/article/details/100529944

题解:
在这里插入图片描述
题解:

class Solution {
public:
    //解法1:迭代法
    vector<vector<int>> levelOrder_1(Node* root) 
    {
        if(root==nullptr)return {};
        vector<vector<int>> result;
        queue<Node*> record;
        record.push(root);
        while(!record.empty())
        {
            vector<int> temp;
            int size=record.size();//每一层的节点数
            for(int i=0;i<size;++i)//size规定了当前层的节点数,我们将当前层的所有节点值添加到temp中,顺便将下一层的所有孩子节点添加到队列中
            {
                Node* node=record.front();record.pop();//获得队头元素
                temp.push_back(node->val);
                for(auto child:node->children)
                    record.push(child);
            }
            result.push_back(temp);
        }
        return result;
    }
    
    //解法2:迭代法,另一种写法
    vector<vector<int>> levelOrder_2(Node* root)
    {
        if(!root)return {};
        vector<vector<int>> result;
        queue<pair<Node*,int>> record;
        record.push(make_pair(root,0));//根节点入队列
        while(!record.empty())
        {
            Node* node=record.front().first;//节点
            int height=record.front().second;//节点所在的层数,即对应数组中的下标
            record.pop();//队头出栈
            if(height==result.size())result.push_back({node->val});//下标与数组大小相等,在数组尾添加元素
            else result[height].push_back(node->val);//下标比数组大小下,在下标所对应的数组添加元素
            
            for(auto child:node->children)//遍历子树,
                record.push(make_pair(child,height+1));
        }
        return result;
    }
    
    //解法3:递归版,需要传入下标值,否则回溯的话,index就不能回溯到上一层的下标
    vector<vector<int>> levelOrder_3(Node* root)
    {
        vector<vector<int>> result;
        helper(root,0,result);
        return result;
    }
    void helper(Node* root,int index,vector<vector<int>>& result)
    {
        if(!root) return ;
        if(result.size()==index)result.push_back({root->val});
        else result[index].push_back(root->val);
        for(auto child:root->children)
            helper(child,index+1,result);
    }
};

猜你喜欢

转载自blog.csdn.net/qq_43152052/article/details/100529944