同样,使用两个队列进行层间循环和层内循环。最后使用一个栈进行转置。
PS:
特别注意的是,对于vector的使用,在赋值的阶段会发生内存报错的情况:
vector<int> vec1;
vec1[0]=1
直接使用下标赋值是错误的,应使用的是push_back()函数进行数值添加。
而,在调用已经赋值的变量时,可以使用下标,如:
int num=vec1[0];
一定注意!!
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<vector<int>> levelOrderBottom(TreeNode* root) { 13 vector<vector<int>> res; 14 15 stack<vector<int>> st; 16 17 if(root==NULL) 18 return res; 19 TreeNode * temp; 20 queue<TreeNode *> q; 21 q.push(root); 22 while(!q.empty()) //层间循环 23 { 24 queue<TreeNode *> q2; 25 vector<int> level; 26 while(!q.empty()) //层内的节点循环 27 { 28 temp=q.front(); 29 q.pop(); 30 level.push_back(temp->val); 31 if(temp->left!=NULL) 32 q2.push(temp->left); 33 if(temp->right!=NULL) 34 q2.push(temp->right); 35 } 36 q=q2; 37 st.push(level); 38 } 39 while(!st.empty()) 40 { 41 res.push_back(st.top()); 42 st.pop(); 43 } 44 return res; 45 } 46 };