题目描述
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
递归
max(左子树直径, 右子树直径, 左子树+右子树)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.diam = 0
def diameterOfBinaryTree(self, root: TreeNode) -> int:
# 深度优先遍历
self.finddepth(root) # 深度
return self.diam
def finddepth(self, node:TreeNode) -> int:
# 判断是否到达最子节点,其深度为0
if node == None:
return 0
l_depth = self.finddepth(node.left)
r_depth = self.finddepth(node.right)
self.diam = max(self.diam, l_depth+r_depth)
return 1 + max(l_depth, r_depth)