- 1、题目描述:

图片说明
- 2、题目链接:

https://www.nowcoder.com/practice/445c44d982d04483b04a54f298796288?tpId=117&tqId=37781&rp=1&ru=%2Factivity%2Foj&qru=%2Fta%2Fjob-code-high%2Fquestion-ranking&tab=answerKey
-3、 设计思想:
图片说明
图片说明
详细操作流程看下图:
图片说明

-4、视频讲解链接B站视频讲解

-5、代码:
c++版本:

    /**
 * struct TreeNode {
 *    int val;
 *    struct TreeNode *left;
 *    struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     *
     * @param root TreeNode类
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > Print(TreeNode* root) {
        vector<vector<int> >res;//用于返回最后的结果
        if(root == NULL) return res;//如果根节点为空就返回结果
        queue<TreeNode *>q;//用于存储每一层的节点
        q.push(root);
        while(!q.empty()){
            vector<int>temp;//用于存储当前遍历这一层的节点
            int n = q.size();
            for(int i = 0;i < n;i ++){
                TreeNode *node = q.front();//取出队列的第一个元素
                q.pop();
                temp.push_back(node->val);//将队头元素保存起来
                if(node->left != NULL) q.push(node->left);//左孩子如果不为空就进队列
                if(node->right != NULL) q.push(node->right);//右孩子如果不为空就进队列
            }
            res.push_back(temp);//将这一层的节点数里面据保存到res
        }
        return res;
    }

};

Java版本:

import java.util.*;
public class Solution {
    /**
     *
     * @param root TreeNode类
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> Print(TreeNode root) {
        ArrayList<ArrayList<Integer>> res = new ArrayList();//用于返回最后的结果
        if(root == null) return res;//如果根节点为空就返回结果
        Queue<TreeNode> q = new LinkedList<TreeNode>();//用于存储每一层的节点
        q.add(root);
        while(!q.isEmpty()){
            int n = q.size();
            ArrayList<Integer> temp = new ArrayList<>();//用于存储当前遍历这一层的节点
            for(int i = 0;i < n;i ++){
                TreeNode node = q.poll();//取出队列的第一个元素
                temp.add(node.val);//将队头元素保存起来
                if(node.left != null) q.add(node.left);//左孩子如果不为空就进队列
                if(node.right != null) q.add(node.right);//右孩子如果不为空就进队列
            }
            res.add(new ArrayList<>(temp));//将这一层的节点数里面据保存到res
        }
        return res;
    }
}

Python版本:

import queue
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

#
# 
# @param root TreeNode类 
# @return bool布尔型
#
class Solution:
    def Print(self , root ):
        res = []#用于返回最后的结果
        if not root:
            return res #如果根节点为空就返回结果
        q = queue.Queue()#用于存储每一层的节点
        q.put(root)
        while q.qsize() >0:
            temp = []#用于存储当前遍历这一层的节点
            n = q.qsize()
            for i in range(n):
                node = q.get()#取出队列的第一个元素
                temp.append(node.val)#将队头元素保存起来
                if node.left:
                    q.put(node.left)#左孩子如果不为空就进队列
                if node.right:
                    q.put(node.right)#右孩子如果不为空就进队列
            res.append(temp)#将这一层的节点数里面据保存到res

        return res

JavaScript版本:

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function Print(pRoot)
{
    // write code here
    if(pRoot == null) return [];///如果根节点为空就返回结果
    let res = [] ///用于返回最后的结果
    let que = [pRoot]///用于存储每一层的节点
    while(que.length){
        let n = que.length,temp = [];///用于存储当前遍历这一层的节点
        while(n--){
            let node = que.shift();///取出队列的第一个元素
            temp.push(node.val);///将队头元素保存起来
            if(node.left){
                ///左孩子如果不为空就进队列
                que.push(node.left)
            }
            if(node.right){
                ///右孩子如果不为空就进队列
                que.push(node.right)
            }
        }
        res.push(temp)///将这一层的节点数里面据保存到res
    }
    return res

}
module.exports = {
    Print : Print
};