定义:对于任意节点 u,假设它的左子树深度为 Lu,右子树深度为 Ru,那么经过 u 的最长路径长度为 Lu+Ru。
全局直径:我们需要维护一个全局变量 diameter,初始化为 0。对树中每个节点 u,更新:
diameter=max(diameter,Lu+Ru)
递归计算深度:使用后序遍历,对于节点 u:
给定一棵二叉树序列,返回该树的直径。 二叉树的直径指树中任意两个节点之间最长路径的长度。这条路径可能经过也可能不经过根节点root。
两节点之间路径的长度由它们之间边数表示。
序列定义:输入序列是二叉树的层序遍历,其从上到下、从左到右依次将节点值入队(包含空节点,但序列尾部空节点会被省略),非空节点为非0值,空节点以0值表示。
例1:
表示为:
9
1 2 0 4 0 0 0 5
第一行为序列长度,第二行为层序遍历序列
例2:
表示为:
6
1 5 2 3 0 6
注:给定的二叉树非空的合法序列,层序遍历序列长度<=500,−100<=数值<=100
输入层序遍历序列(见题干说明)
二叉树的直径
输入
9
1 2 0 3 4 0 0 0 5
输出
3