做该题的思想很简单,就是进行层次遍历,但是需要注意的是它的信息量有点大,我们直观地会认为使用队列进行,这个题要用循环队列来减少内存的使用,知道这些做起来就简单了,代码如下:
#include<vector>
using vec_int = vector<int>;
#define NUM 200
class Solution {
public:
vector<int> levelOrder(TreeNode* root) {
//使用层次遍历,由于该题的数据量有点小大,所以使用单向队列的话,耗费内存会很多,在此模拟使用环形队列,降低内存消耗
vec_int res;
TreeNode* que[NUM];
int front = -1,rear = -1;//模拟:front为队列头指针,rear为队列尾指针
TreeNode* p = root;
if(p){
que[(++rear)%NUM] = p;
while(front!=rear){//如果根节点不为空
p = que[(++front)%NUM];
res.push_back(p->val);
//判断如果不为空就入队,先左后有
if(p->left)
que[(++rear)%NUM] = p->left;
if(p->right)
que[(++rear)%NUM] = p->right;
}
}
return res;
}
};