题目
**首先题意就是求树的 左边深度与右边深度之和。**细节需要牢记!!!
相同套路题目:124.二叉树的最大路径和
Python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def __init__(self):
self.diameter = 0
def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
self.find(root)
return self.diameter
# 返回以root为根节点的直径
def find(self, root):
if not root:
return 0
leftDepth = self.find(root.left)
rightDepth = self.find(root.right)
self.diameter = max(leftDepth + rightDepth, self.diameter)
return 1 + max(leftDepth, rightDepth)
Java
法1:自己想的垃圾算法
class Solution {
public int diameterOfBinaryTree(TreeNode root) {
if (root == null) {
return 0;
}
int curDim = maxDepth(root.left) + maxDepth(root.right);
int leftDim = diameterOfBinaryTree(root.left);
int rightDim = diameterOfBinaryTree(root.right);
return Math.max(curDim, Math.max(leftDim, rightDim));
}
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
}
return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
}
}
法2:DFS好方法
和求二叉树中最大路径和相同套路
合理利用全局变量, 可以大大简化问题!!!
class Solution {
int ans = 0;
public int diameterOfBinaryTree(TreeNode root) {
if (root == null) {
return 0;
}
maxDepth(root);
return ans;
}
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
}
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
ans = ans > leftDepth + rightDepth ? ans : leftDepth + rightDepth;
return 1 + Math.max(leftDepth, rightDepth);
}
}
文章讨论了两种求解二叉树直径的方法,重点介绍了一种使用DFS的简化版算法,通过全局变量避免重复计算。
109

被折叠的 条评论
为什么被折叠?



