- 观察
- 二叉树的最大直径为两节点之间的边的数目,而这条直径我们可通过遍历一个节点,找出它左边最长路径和右边最长路径相加得到一条总路径。我们知道,任意节点都与根节点连通。我们把遍历的每一个点都当做根节点,那么他的左右最长路径就是他的最大深度。
- 实现
- 我们用DFS遍历节点,用全局变量max来实时存储当前直径最大值。
具体代码如下
int max;
int Deep(struct TreeNode*root)
{
if(!root)
return 0;
int a=Deep(root->left),b=Deep(root->right);//为了减少时间复杂度,我们将BFS与树的深度求解结合
max=fmax(max,a+b);
return fmax(a,b)+1;
}
int diameterOfBinaryTree(struct TreeNode* root)
{
max=0;
Deep(root);
return max;
}