美文网首页lintcode程序员
69. 二叉树的层次遍历

69. 二叉树的层次遍历

作者: 和蔼的zhxing | 来源:发表于2018-01-24 20:15 被阅读42次

给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
样例
给一棵二叉树 {3,9,20,#,#,15,7}

  3
 / \
9  20
  /  \
 15   7

返回他的分层遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

层次遍历+queue

参见数据结构与算法中写的,层次遍历是需要借助queue来做的,单纯的逐层遍历写起来是比较简单的,像这样要求不同的层还要放在不同的vector中,稍微难一点,我一开始也没想好到底怎么做,参考了别人的代码,实际上也不是很难,主要是记录一下每层的长度,那如何知道每一层的长度呢,用了一个很巧妙的方法。

  1. 首先建立一个队列que,把根节点放进去。伪代码:
while(que非空)
{
        建立vector<int>   x;
        int len=que.size();
       while(len--)
      {
            把front->val放进x,并删掉front;
            把front的左右子节点放入que;(先把front节点记录下来)            
      }
      把x放入vecto<vector<int>>  res ;
} 
返回  res;

这样操作的巧妙之处在于每次可以用len记录当前层的节点的个数,然后通过while循环把当前节点的下一层放进queue,这样while出来之后刚好是遍历完了这一层(而且已经删掉),queue里面剩下的就是下一层的节点了。

vector<vector<int>> levelOrder(TreeNode * root) {
        vector<vector<int>>  res;
        if(!root)
        return res;
        
        queue<TreeNode*>   que;
        que.push(root);
        int len=1;      //第一个节点的大小
        
        while(!que.empty())
        {
            len=que.size();
            vector<int> vtmp;
            
            
            while(len--)
            {
                TreeNode *tmp;
                tmp=que.front();
                vtmp.push_back(tmp->val);
                que.pop();
                if(tmp->left)   que.push(tmp->left);
                if(tmp->right)  que.push(tmp->right);
                
            }
            if(!vtmp.empty())
                res.push_back(vtmp);
        }
        return res;
        
        // write your code here
    }

相关文章

  • js刷林扣 lintcode(2017年3月)

    3.10 69.给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 二叉树的层次遍历样例给一棵二叉树 {3...

  • 二叉树的蛇形层次遍历(LeetCode.103)

    题目 解析 首先参考二叉树的层次遍历层次遍历二叉树(LeetCode--102二叉树的层次遍历)[https://...

  • 二叉树遍历

    二叉树遍历(非递归写法) 先序遍历 中序遍历 后序遍历 层次遍历 给定一个二叉树,返回其按层次遍历的节点值。 (即...

  • 二叉树的基本算法

    一、二叉树的递归遍历 二、二叉树的层次遍历 二叉树的层次遍历是指二叉树从上到下,从左到右遍历数据。同一层中的节点访...

  • 二叉树的层次遍历

    三道层次遍历题,同一个模板,这边用到的是两个队列 二叉树的层次遍历 LeetCode题目地址 二叉树的层次遍历 加...

  • 二叉树的层次遍历

    一、二叉树的层次遍历原理 如图所示为二叉树的层次遍历,即按照箭头所指方向,按照1、2、3、4的层次顺序,对二叉树中...

  • 二叉树 基础操作

    二叉树的使用 二叉树结构 先序创建二叉树 DFS 先序遍历二叉树 中序遍历二叉树 后序遍历二叉树 BFS 层次遍历...

  • 数据结构重学日记(二十二)二叉树的层次遍历

    二叉树的层次遍历也属于非递归遍历,和之前先序、中序、后序遍历的区别在于层次遍历需要借助队列来实现。 层次遍历的操作...

  • 二叉树遍历

    1.层次遍历(广度优先遍历) 用队列实现,队首出队,队首的子节点入队。 1,二叉树的层次遍历, 打印 2,二叉树的...

  • 力扣题解(树)

    100. 相同的树 101. 对称二叉树 102. 二叉树的层次遍历 103. 二叉树的锯齿形层次遍历 104. ...

网友评论

    本文标题:69. 二叉树的层次遍历

    本文链接:https://www.haomeiwen.com/subject/lvcpaxtx.html