- 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 };