目录
题目:剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过啦!!!
题目:剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过啦!!!
写在最后:
题目:剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(Leetcode)

题目的接口:
/**
 * 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) {
    }
}; 
解题思路:
我们可以利用队列先进先出的特性,
用队列来存放二叉树节点,

然后每次遍历二叉树的一层节点,
每层遍历的时候用数组存起来,然后放进二维数组,
每层都用新的数组村节点值即可。
代码:
/**
 * 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) {
        //建一个队列
        queue<TreeNode*> q;
        TreeNode* cur = root;
        int qsize = 0;
        //先把根节点入队
        if(root)
        {
            q.push(root);
            qsize++;
        }
        vector<vector<int>> vv;
        //循环到不再有节点入队
        while(!q.empty())
        {
            //每次初始化新数组
            vector<int> v;
            //循环该层的节点数
            while(qsize--)
            {
                //节点出队,节点值打印
                TreeNode* front = q.front();
                q.pop();
                v.push_back(front->val);
                //左右孩子入队
                if(front->left)
                {
                    q.push(front->left);
                }
                if(front->right)
                {
                    q.push(front->right);
                }
            }
            //该层的节点数
            qsize = q.size();
            vv.push_back(v);
        }
        return vv;
    }
};
 
过啦!!!

题目:剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(Leetcode)

题目的接口:
/**
 * 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) {
    }
}; 
解题思路:
这道题其实是上一道题的一个变式练习,
整体框架和思路是一样的,
我们只需要根据题意,将双数层的数组反转再打印即可。
代码:
/**
 * 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) {
        //建一个队列
        queue<TreeNode*> q;
        TreeNode* cur = root;
        int qsize = 0;
        int cnt = 0;
        //先把根节点入队
        if(root)
        {
            q.push(root);
            qsize++;
        }
        vector<vector<int>> vv;
        //循环到不再有节点入队
        while(!q.empty())
        {
            //每次初始化新数组
            vector<int> v;
            //记录层数
            cnt++;
            //循环该层的节点数
            while(qsize--)
            {
                //节点出队,节点值打印
                TreeNode* front = q.front();
                q.pop();
                v.push_back(front->val);
                //左右孩子入队
                if(front->left)
                {
                    q.push(front->left);
                }
                if(front->right)
                {
                    q.push(front->right);
                }
            }
            //该层的节点数
            qsize = q.size();
            //层数为双数的时候反转一下数组就行
            if(cnt % 2 == 0)
            {
                reverse(v.begin(), v.end());
            }
            vv.push_back(v);
        }
        return vv;
    }
}; 
过啦!!!

写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。


















