102. 二叉樹的層次遍歷 leetcode
阿新 • • 發佈:2018-11-07
給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。
例如:
給定二叉樹: [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其層次遍歷結果:
[ [3], [9,20], [15,7] ]
這道題需要注意的地方是它的返回值型別是vector<vector<int>>的,也就是容器裡面的項全都是容器,而且是每一層作為一個容器來返回的
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { //先把根節點入隊,然後出隊,在出隊的過程中把出隊元素的左右子樹入隊 //直到遍歷完所有的結點為止 vector<vector<int>> rec; //記錄返回的結果 if(root == NULL){ return rec; } queue<TreeNode*> que; //佇列 que.push(root); while(!que.empty()){ //只要佇列不空,迴圈就繼續進行 int size = que.size(); //記錄這一層的結點數量 vector<int> rec_temp; while(size--){ //size不等於0的時候繼續迴圈 TreeNode *t = que.front(); //出隊 rec_temp.push_back(que.front()->val); que.pop(); if(t->left != NULL) que.push(t->left); if(t->right != NULL) que.push(t->right); } rec.push_back(rec_temp); } return rec; } };