更新最长路径: 在计算当前节点的子树高度时,利用左子树和右子树的高度之和(left + right + 1)来更新全局变量 res。此值表示以当前节点为中间节点的最长路径的节点数。
返回子树高度: 当前节点的子树高度为左、右子树高度的较大值加1,用于上层节点的路径计算。
结果转换: 由于树的直径是边的数量,而 res 记录的是节点数,最终结果需返回 res - 1。
Java代码:
classSolution{int res =1;publicintdiameterOfBinaryTree(TreeNode root){dfs(root);return res -1;}privateintdfs(TreeNode node){if(node ==null){return0;}int left =dfs(node.left);int right =dfs(node.right);
res =Math.max(res, left + right +1);returnMath.max(left, right)+1;}}