102. 二叉树的层序遍历

102. 二叉树的层序遍历


层次遍历在很多地方都会有较好的效果,比如在查找二叉树深度的时候比普通的DFS快上了不少。

本题用队列存储每个节点,当节点出队列时令它的左右子节点依次进入队列,
如何处理打印每一行的问题?某一层进入队列中的数就是下一层要输出的数,依次迭代,比如队列:
在这里插入图片描述

一开始,根节点3进入队列,该层元素就有一个,第一层输出3 , 然后3出队列,左右孩子9,20入队;
第二层就有两个元素,会循环两次,依次输出9,20,并将他们的孩子(为空就不进入)15,7入队;
第三层也就两个元素,会循环两次,依次输出15,7,没有孩子入队;
此时队列为空,退出循环,结束。

代码如下:

class Solution {
public:
  vector<vector<int>> levelOrder(TreeNode* root) {
  vector<vector<int>> a;
  if(root == nullptr)
    return a;
  queue<TreeNode*>b;
  TreeNode* cur = root;
  b.push(cur);
  int depth = 0 ,size;
  while(!b.empty())
  {
      size = b.size();
      depth++;
      vector<int> d;
      while(size--)
      {
          cur = b.front();
          d.push_back(cur->val);
          b.pop();
          if(cur->left != nullptr)
            {
                b.push(cur->left);
            }
          if(cur->right != nullptr)
          {
              b.push(cur->right);
          }
      }
      a.push_back(d);
  }
  return a;
  }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值