二叉树的层序遍历

二叉树的层序遍历

实现过程

1、首先将二叉树的根节点push到队列中
2、判断队列不为NULL
3、计算队列里的元素个数size
4、输出队头的元素
5、判断节点如果有左节点,就将左节点push到队列中。
6、点如果有右节点,就将右节点push到队列中;
7、将遍历过的节点pop出队列,且size–
8、循环步骤4-7,直到size<0;
9、循环以上操作,直到tree == NULL。

每次内部循环结束后的队列中存在的元素都是同一层的元素。
若需要按顺序输出遍历的结果,可以建立一个二维数组res,一个一位数组temp。
在内部循环中,把每次对头元素的值放进数组temp中,在内部循环结束后得到一组数据
在每次结束内部循环后,把temp加入res中,每一行对应二叉树的每一层数据。

代码实现:(计算每层的平均值)
vector<double> averageOfLevels(TreeNode* root) {
        vector<vector<int>>res;
        vector<double>re;
        double tmp=0;
        if(root==NULL)return re;
        queue<TreeNode*>tree;
        tree.push(root);
        while(!tree.empty())
        {
            vector<int>temp;
            int sz=tree.size();
            while(sz--)
            {
                TreeNode* top=tree.front();
                tree.pop();
                temp.push_back(top->val);
                if(top->left)tree.push(top->left);
                if(top->right)tree.push(top->right);
            }
            res.push_back(temp);
        }
        for(int i=0;i<res.size();i++)
        {
            for(int j=0;j<res[i].size();j++)
            {
                tmp+=res[i][j];
            }
            re.push_back(tmp/res[i].size());
            tmp=0;
        }
        return re; 
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值