一、题目解析
这道题题意就是一个二叉树找出路径长度最大的两个点,并将这两个点的路径长度输出为结果。需要注意的就是路径不一定非得经过根节点,这也是容易犯错的地方,也是这道题的难点所在。
二、思路分析
这道题首先很容易想到从根节点开始,分别计算左右子节点的深度然后相加即为结果,这种思路是最容易误入的。因为最长路径很可能是不经过根节点的。那么从深度优先搜索DFS的思想出发,从某一节点开始,计算路过以该节点为根节点的最长路径,并将其与之前的最长路径进行比较,若大于当前最长路径,则新路径为最长路径,否则之前的路径仍旧为最长路径。在计算某一节点的最长路径时,即为该节点开始左右子树的深度和。那么DFS遍历这棵二叉树的每一个节点,就可以计算出这棵二叉树两叶子节点之间的最长路径了。
三、代码实现
class Solution {
public:
int maxdiadepth = 0;
int dfs(TreeNode* root){
if(