非最优解,仅学习记录。
算法思路:
广度优先遍历 迭代法
!存结果怎么存?
–建立一个二维动态数组存放总的返回结果,再建立一个一位动态数组存放每次遍历的结果,每次遍历完成后将一维数组存入结果数组中即可。
!判断空可以用NULL或nullptr(c++)
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
//vector<int> v;//不建议定义此处。见下。
//根结点不为空时才有之后的遍历。
if(root){
queue<TreeNode*> que;//用于存放结点的队列
que.push(root);//先存入根结点,que初始长度+1
while(!que.empty()){
vector<int> v;//因一维数组每次层遍历后要清空,故不建议定义为全局的。
int size=que.size();//获取本层数长度
for(int i=0;i<size;i++){
//获取该层每一个结点,将值存入一维数组(按层存)
TreeNode* n=que.front();
v.push_back(n->val);
//将已经用完的结点出队,露出下一个需用结点,为下次循环准备
que.pop();
//将该结点的左右子树添加到队列中,添加也是从队尾添加故不影响前面的结点遍历。
if(n->left)que.push(n->left);
if(n->right)que.push(n->right);
}
//将每次层遍历结束结果结算到最终结果数组中
res.push_back(v);
}
}
return res;
}
};