Day23-二叉树的层序遍历(广度优先搜素)
今天只看了层序遍历
思路如下:一层层的去吧结果遍历到结果数组中。
层序遍历结果为:[1, 2, 3, 4, 5, 6]。
前面迭代方法是用栈去模拟的,那么层序遍历可以用队列去模拟:
先把根节点加入队列,然后在队列弹出来元素之前用一个node去指向它,弹出来元素之后先把node->val加入一维数组,然后用node去把它的左右孩子加入队列。
每遍历完一层的节点之后把一维数组加入结果数组。
个人感觉需要注意的是一维数组和node节点的创建一定是要在while循环里面。因为需要每次重新计算当前队列的大小!!!
这个可以当作一个模板:
层序遍历的思路基本上就是这样了。
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res; //存放结果数组queue<TreeNode *> que; //存储每一层的节点if(root == nullptr) return res; //根节点不为空的话就开始遍历que.push(root);while(!que.empty()){ //int n = que.size(); //每循环一次都要重新计算vector<int> ans; //存放每一层的结果for(int i = 0;i<n;i++){ //开始遍历TreeNode *node = que.front(); //一定要创建一个节点去存储队列的元素que.pop(); //和前序遍历的思路差不多ans.push_back(node->val); //先把元素弹出然后左右孩子加入队列if(node->left) que.push(node->left); //if(node->right) que.push(node->right);}res.push_back(ans); //每遍历完一层就把当前的数组加入结果} return res;}
};