
class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
public int maxValue (TreeNode root) {
// write code here
if(root == null) return 0;
int mm = maxc(root);
return mm;
}
public static int maxc(TreeNode root){
int res =0;
Deque<TreeNode> deque = new ArrayDeque<>();
deque.add(root);
while(!deque.isEmpty()){
int num = deque.size();
int sum = 0;
int maxchazhi = 0;
for(int i=0;i<num;i++){
TreeNode node = deque.remove();
sum +=node.val;
if(node.left != null) {
deque.addLast(node.left);
maxchazhi = Math.max(maxchazhi,node.left.val-node.val);
}
if(node.right != null) {
deque.addLast(node.right);
maxchazhi = Math.max(maxchazhi,node.right.val-node.val);
}
}
sum += maxchazhi;
res = Math.max(sum,res);
}
return res;
}
二叉树每个节点都有一个权值
每一层权值为该层所有节点权值之和
有一次交换某节点和它父节点的机会,至多交换一次,最大权值那层权值是多少
定义同一深度的所有节点为一层
示例
{3,2,3,4} 输出 7
我计算每层权值sum+与子节点的最大差值,通过率只有36%
#bilibili笔试#