简介
题目链接:https://leetcode.cn/problems/diameter-of-binary-tree/description/
解决方式:二叉树 + 递归、DFS
递归
实现思路:
递归迭代每一个二叉树节点,计算经过该节点的直径,即左右子树长度和。维护一个全局最大直径,每个节点计算出的直径与全局最大直径对比,始终维护全局最大直径最大。这样就可以寻找出二叉树的最大直径了。
这其实也就相当于在计算二叉树的深度代码之上,添加一个计算节点的"直径",同时维护最大直径。
java
class Solution {
// 全局最大直径
private int max = 0;
public int diameterOfBinaryTree(TreeNode root) {
// 递归
depth(root);
// 返回结果
return max;
}
private int depth(TreeNode node){
// 递归终止条件
if(node == null) return 0;
// 递归公式
// 计算当前节点左右子树的深度
int left = depth(node.left);
int right = depth(node.right);
// 计算直径并与全局最大直径对比
max = Math.max(max, left + right);
// 返回当前节点深度
return Math.max(left, right) + 1;
}
}