题目介绍
力扣543题:leetcode-cn.com/problems/di…
分析
该题跟之前的[124. 二叉树中的最大路径和]的思路是一样的,一个节点只有两条路可选,要么走左子树,要么走右子树,不能出现继走左子树,又走右子树的情况。
所以我们首先定义一个递归函数,表示当前节点能向根节点贡献的最大路径。如下图所示
即当前所能向根节点贡献的最大路径为:Math.max(左子树贡献的最大路径,右子树的贡献的最大路径) + 1,而已该节点为根节点的直径 = 左子树贡献的最大路径 + 右子树的贡献的最大路径。
代码如下:
/**
* Definition for a binary tree node.
* public 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;
* }
* }
*/
class Solution {
int result = 0;
public int diameterOfBinaryTree(TreeNode root) {
if(root == null) {
return 0;
}
tranverse(root);
return result;
}
public int tranverse(TreeNode root) {
if(root == null) {
return 0;
}
int left = tranverse(root.left);
int right = tranverse(root.right);
int temp = left + right;
//更新二叉树的直径值
result = Math.max(result , temp);
//计算当前节点贡献的最大路径
return Math.max(left , right) + 1;
}
}