給你一個二叉樹的根節點 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也可以,就是先序 中序 後序遍歷的思想