广度优先搜索 层序遍历 队列:
c++
class Solution {
public:
vector<int> levelOrder(TreeNode* root) {
vector<int> res; // 一层一层装,每层都是vector<int>
if(root == nullptr){
return res;
}
queue<TreeNode*> que; // 队列 广度优先搜索,层序优先搜索
que.push(root); // queue.push, vector.push_back, stack.push
while(!que.empty()){
int n = que.size(); // 该层节点数
while(n){
TreeNode* node = que.front(); // 队顶元素
res.push_back(node->val); // 队顶值加入队列
que.pop(); // 弹出队顶
n--; // 该层元素-1
if(node->left != nullptr){
que.push(node->left); // 加入队列的是TreeNode*,加入layer的是val
}
if(node->right != nullptr){
que.push(node->right);
}
}
}
return res;
}
};
python
class Solution:
def levelOrder(self, root: TreeNode) -> List[int]:
res = []
if not root:
return res
que = collections.deque([root]) # 创建python双端队列,并放入p
while que:
n = len(que) # 该层元素个数
while n:
node = que.popleft() # 队顶元素(取出并弹出 popleft())
res.append(node.val)
n -= 1
if node.left:
que.append(node.left)
if node.right:
que.append(node.right)
return res