import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
/**
* @author xnl
* @Description:
* @date: 2022/7/31 21:09
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
TreeNode treeNode = new TreeNode(1, new TreeNode(7, new TreeNode(7), new TreeNode(-8)), new TreeNode(0));
System.out.println(solution.maxLevelSum(treeNode));
}
/**
* 广度优先算法
* @param root
* @return
*/
public int maxLevelSum(TreeNode root) {
if (root == null){
return 0;
}
Queue<TreeNode> queue = new ArrayDeque<>();
queue.add(root);
int ans = root.val;
int level = 0;
int maxLevel = 1;
while (!queue.isEmpty()){
level++;
int size = queue.size();
// 临时最大值
int temp = 0;
for (int i = 0; i < size; i++){
TreeNode node = queue.poll();
temp += node.val;
if (node.left != null){
queue.offer(node.left);
}
if (node.right != null){
queue.offer(node.right);
}
}
if (ans < temp){
maxLevel = level;
ans = temp;
}
}
return maxLevel;
}
List<Integer> sum = new ArrayList<>();
public int maxLevelSum2(TreeNode root) {
dfs(root, 0);
int ans = 0;
for (int i = 0; i < sum.size(); i++){
if (sum.get(i) > sum.get(ans)){
ans = i;
}
}
return ans + 1;
}
/**
* 深度优先算法
*/
private void dfs(TreeNode root, int level){
if (level == sum.size()){
sum.add(root.val);
} else {
sum.set(level, sum.get(level) + root.val);
}
if (root.left != null){
dfs(root.left, level + 1);
}
if (root.right != null){
dfs(root.right, level + 1);
}
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
力扣:1161. 最大层内元素和
最新推荐文章于 2022-07-31 23:49:50 发布