二叉树的层次遍历

二叉树的层次遍历

题目描述:

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

给一棵二叉树 {3,9,20,#,#,15,7} :

  3
 / \
9  20
  /  \
 15   7

返回他的分层遍历结果:

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

解题思路:

利用队列的特性,将根结点放入事先建好的队列中,若队列的长度不为0,则在队列中删除根结点,同时把根结点插入向量中以及把它的左右儿子放进队列中,以此类推,这样便能达到层次遍历的要求。

代码实现:

class Solution {
    /**
     * @param root: The root of binary tree.
     * @return: Level order a list of lists of integer
     */
public:
    vector<vector<int>> levelOrder(TreeNode *root) {
        // write your code here
         vector<vector<int>>lever;
         if(root==NULL)   return lever;
         vector<int>dlever;
         queue<TreeNode*>q;
        q.push(root);
        int i=1;
        int j=0;
        while(!q.empty()){
            TreeNode *p=q.front();
            q.pop();
            if(p==NULL) {
                ++j;
            }
            else {
                dlever.push_back(p->val);
                q.push(p->left);
                q.push(p->right);
            }
            if(i==(dlever.size()+j)&&dlever.size()!=0){
                lever.push_back(dlever);
                dlever.clear();
                i=i*2;
                j=j*2;
            }
        }
        return lever;
    }
};

A题感悟:

我觉得这道题有些难,虽然思路好理解,但是代码实现总是不行,所有就借鉴了一下别人的代码。在此代码中学会了队列还有双重向量的一些用法,也算收获不少。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值