題目
給你二叉樹的根節點 root
,返回其節點值的 層序遍歷 。 (即逐層地,從左到右訪問所有節點)。
示例
輸入:root = [3,9,20,null,null,15,7]
輸出:[[3],[9,20],[15,7]]輸入:root = [1]
輸出:[[1]]輸入:root = []
輸出:[]
思路
-
創建一個隊列(queue)用于存儲待處理的二叉樹節點。
-
將根節點放入隊列中。
-
開始進行層序遍歷:
- 當隊列不為空時,表示還有節點需要處理。
- 每次處理一層的節點時,先獲取當前隊列的大小,這個大小即為當前層的節點數目。
- 遍歷當前層級的節點:
- 依次取出隊首的節點,將其值存入當前層級的結果中。
- 如果該節點有左子節點,將左子節點加入隊列。
- 如果該節點有右子節點,將右子節點加入隊列。
- 將每一層的節點值存入最終的結果中,直至隊列為空,完成整個層序遍歷。
Code
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> result; // 存儲層序遍歷的結果if (root == NULL) {return result; // 如果根節點為空,直接返回空的結果}queue<TreeNode*> q;q.push(root); // 將根節點放入隊列中// 開始進行層序遍歷while (!q.empty()) {int level_size = q.size(); // 獲取當前層級的節點數量vector<int> level_values; // 存儲當前層級節點的值// 遍歷當前層級的節點for (int i = 0; i < level_size; i++) {TreeNode* node = q.front();q.pop(); // 出隊level_values.push_back(node->val); // 存儲當前節點的值// 將當前節點的子節點(如果存在)加入隊列中if (node->left) {q.push(node->left);}if (node->right) {q.push(node->right);}}result.push_back(level_values); // 將當前層級的節點值存入最終結果中}return result;}
};