【leetcode】-102-二叉树层序遍历

直接输出层序遍历倒不是什么难事儿,但是如何分层呢? --思路是保证一次性处理完一层结点,只要加一个for循环就好了

上一次for加入了多少个节点,就意味着下一层有多少个结点,那么下一次for循环就得出去多少个节点。

 vector<vector<int>> levelOrder(TreeNode* root) 
    {      
        vector<vector<int>> res;
        if(root==NULL)return res;
        queue<TreeNode*> que;
        TreeNode *p=root;
        que.push(p); 

        while(!que.empty())
        {         
            int n=que.size();
            vector<int> temp;
            for(int i=0;i<n;i++)//保证每次处理完整一层
            {
                 p=que.front();
                 que.pop();
                 if(p){//按道理在这里不判断也行,但是leetcode会通过不了
                     temp.push_back(p->val);
                     if(p->left)  que.push(p->left);
                     if(p->right) que.push(p->right);
                 }
            }
            res.push_back(temp);
        }

        return res;      
    }

猜你喜欢

转载自blog.csdn.net/qq_39328436/article/details/113704474