leetcode1161. 最大層內元素和

給你一個二叉樹的根節點 root。設根節點位於二叉樹的第 1 層,而根節點的子節點位於第 2 層,依此類推。

請你找出層內元素之和 最大 的那幾層(可能只有一層)的層號,並返回其中 最小 的那個。

示例:

輸入:[1,7,0,7,-8,null,null] 輸出:2 解釋: 第 1 層各元素之和爲 1, 第 2 層各元素之和爲 7 + 0 =
7, 第 3 層各元素之和爲 7 + -8 = -1, 所以我們返回第 2 層的層號,它的層內元素之和最大。

提示:

  • 樹中的節點數介於 1 和 10^4 之間
  • -10^5 <= node.val <= 10^5

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/maximum-level-sum-of-a-binary-tree
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

基本思想

層次遍歷

/**
 * 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:
    int maxLevelSum(TreeNode* root) {
        //層次遍歷,遍歷的過程中計算每一層節點的和
        if(!root)
            return 0;
        int maxval = INT_MIN, maxpos;
        queue<TreeNode*> q;
        TreeNode * p = root;
        int dep = 1;
        q.push(p);
        while(!q.empty()){
            int n = q.size();
            int cur = 0;
            while(n--){
                auto t = q.front();
                cur += t->val;
                q.pop();
                if(t->left)
                    q.push(t->left);
                if(t->right)
                    q.push(t->right);                
            }
            if(cur > maxval){
                maxval = cur;
                maxpos = dep;
            }
            ++dep;
        }
        return maxpos;
    }
};

說明:其實最根本的目標是遍歷樹,在遍歷樹的過程中計算每一層節點的和,用dfs也可以,就是先序 中序 後序遍歷的思想

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