給你二叉樹的根節點?root
?,返回其節點值的?層序遍歷?。 (即逐層地,從左到右訪問所有節點)。
示例 1:
輸入:root = [3,9,20,null,null,15,7] 輸出:[[3],[9,20],[15,7]]
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {if(!root) return {};vector<vector<int>> ans;vector<TreeNode *> cur={root};while(cur.size()){vector<int> vals;vector<TreeNode *> nxt;for(auto x:cur){vals.push_back(x->val);if(x->left) nxt.push_back(x->left);if(x->right) nxt.push_back(x->right);}ans.push_back(vals);cur=nxt;}return ans;}
};
思路:
先判斷二叉樹根節點是否為空,為空則直接返回空結果;接著初始化存儲結果的二維向量 `ans` 和存儲當前層節點的向量 `cur`(初始含根節點),然后通過 `while` 循環不斷迭代,每次循環中先定義存儲當前層節點值的 `vals` 和存儲下一層節點的 `nxt`,再遍歷當前層節點,將其值存入 `vals`,并把左右子節點(若存在)存入 `nxt`,循環結束后將 `vals` 加入 `ans`,最后更新 `cur` 為 `nxt`,如此反復直至遍歷完二叉樹所有層,最終返回 `ans` 得到二叉樹的層序遍歷結果。
時間復雜度為?O(n),空間復雜度也為?O(n),n是二叉樹的節點數