637. Average of Levels in Binary Tree(二叉樹的層平均值)

637. 二叉樹的層平均值

給定一個非空二叉樹, 返回一個由每層節點平均值組成的數組.

示例 1:

輸入:
    3
   / \
  9  20
    /  \
   15   7
輸出: [3, 14.5, 11]
解釋:
第0層的平均值是 3,  第1層是 14.5, 第2層是 11. 因此返回 [3, 14.5, 11].

注意:

  1. 節點值的範圍在32位有符號整數範圍內。

解法一

//時間複雜度O(n), 空間複雜度O(n)
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<double> averageOfLevels(TreeNode* root) {
        vector<double> res;
        queue<TreeNode*> q1;
        q1.push(root);
        while(!q1.empty()) {
            queue<TreeNode*> q2;
            q2.swap(q1);
            long sum = 0, n = 0;
            while(!q2.empty()) {
                TreeNode* temp = q2.front();
                q2.pop();
                sum += temp->val;
                n++;
                if(temp->left) q1.push(temp->left);
                if(temp->right) q1.push(temp->right);
            }
            res.push_back((double)sum / n);
        }
        return res;
    }
};

層序遍歷。爲了區分層次,使用兩個隊列。q1記錄上一層結點,每次循環把q1給q2,清空q1,遍歷q2時把其個數及和記錄,q2空時說明當前層遍歷結束,開始下一層。

2019/06/13 20:45
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章