层序遍历不是按照父子关系方式遍历,而是采用兄弟关系遍历,因此
不能采用递归的方式来做。
树的定义里只能从父亲找孩子,因此需要把父亲存起来,这样才能把一堆互为兄弟的孩子遍历到,所以要使用队列,FIFO的那种。
-
vector<vector<int> > levelOrder(TreeNode *root) {
-
vector<vector<int> > result;
-
if(root!=NULL){
-
deque<TreeNode *> queue;
-
queue.push_back(root);
-
vector<int> vec;
-
int size=1;
-
while(!queue.empty()){
-
if(queue.front()!=NULL){
-
vec.push_back(queue.front()->val);
-
if(queue.front()->left!=NULL)
-
queue.push_back(queue.front()->left);
-
if(queue.front()->right!=NULL)
-
queue.push_back(queue.front()->right);
-
queue.pop_front();
-
size--;
-
}
-
if(size==0){
-
size=queue.size();
-
result.push_back(vec);
-
vec.clear();
-
}
-
}
-
}
-
return result;
-
}
阅读(737) | 评论(0) | 转发(0) |