9.1 bilibili 后端第二题
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%