如果你想在校招中顺利拿到更好的offer,阿秀建议你多看看前人的经验 ,比如准备简历实习上岸经历校招总结阿里、字节、腾讯、美团等一二线大厂真实面经也欢迎来一起参加秋招打卡活动 等;如果你是计算机小白,学习/转行/校招路上感到迷茫或者需要帮助,可以点此联系阿秀;免费分享阿秀个人学习计算机以来的收集到的好资源,点此白嫖;如果你需要《阿秀的学习笔记》网站中求职相关知识点的PDF版本的话,可以点此下载

# 面试题32 - II. 从上到下打印二叉树 II (opens new window)

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

例如: 给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
1
2
3
4
5

返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]
1
2
3
4
5

提示:

  1. 节点总数 <= 1000

# 1、两个栈,层次遍历即可

执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户

内存消耗:12.7 MB, 在所有 C++ 提交中击败了100.00%的用户

    vector<vector<int>> levelOrder(TreeNode* root) {

        	vector<vector<int>> result;
	if (root == nullptr) return result;
	queue<TreeNode*> q1,q2;
	q1.push(root);
	TreeNode* node;
	vector<int> temp;
	while (!q1.empty() || !q2.empty()) {	
		temp.clear();
		while (!q1.empty()) {
			node = q1.front();
			q1.pop();
			temp.push_back(node->val);
			if (node->left)  q2.push(node->left);
			if (node->right)  q2.push(node->right);
		}
		if(temp.size())  result.push_back(temp);

		temp.clear();
		while (!q2.empty()) {
			node = q2.front();
			q2.pop();
			temp.push_back(node->val);
			if (node->left)  q1.push(node->left);
			if (node->right)  q1.push(node->right);
		}
		if (temp.size())  result.push_back(temp);
	}
	return result;

    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 2、改为一个栈也是可以的

执行用时:4 ms, 在所有 C++ 提交中击败了89.74%的用户

内存消耗:12.6 MB, 在所有 C++ 提交中击败了100.00%的用户

vector<vector<int>> levelOrder(TreeNode* root) {

vector<vector<int>> result;
	if (root == nullptr) return result;
	queue<TreeNode*> q;
	q.push(root);
	TreeNode* node;

	while (!q.empty()) {	
		int count = q.size();
		vector<int> temp;
		while (count--) {
				node = q.front();
				q.pop();
				temp.push_back(node->val);
				if (node->left)  q.push(node->left);
				if (node->right)  q.push(node->right);
		}
		result.push_back(temp);
		
	}
	return result;

    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24