题目描述:
方法1:非递归,使用队列辅助
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result;
queue<TreeNode*> que;
if(!root) return result;
que.push(root);
TreeNode* temp;
while(!que.empty()){
int size = que.size(); //每一次while遍历,que存的都是某一层的节点
vector<int> layer;
for(int i=0;i<size;i++){
temp = que.front();
que.pop();
layer.push_back(temp->val);
if(temp->left) que.push(temp->left);
if(temp->right) que.push(temp->right);
}
result.push_back(layer);
}
return result;
}
};
方法2:递归
class Solution {
public:
void order(TreeNode* root, vector<vector<int>>& result, int length){
if(!root) return;
if(length == result.size()) result.push_back(vector<int>());
result[length].push_back(root->val);
order(root->left,result,length+1);
order(root->right,result,length+1);
}
vector<vector<int>> levelOrder(TreeNode* root) {
int length = 0;
vector<vector<int>> result;
order(root,result,length);
return result;
}
};