【543 Diameter of Binary Tree】深度优先搜素思维运用

来源:互联网 发布:源码云平台 编辑:程序博客网 时间:2024/06/06 02:18

一、题目解析

这道题题意就是一个二叉树找出路径长度最大的两个点,并将这两个点的路径长度输出为结果。需要注意的就是路径不一定非得经过根节点,这也是容易犯错的地方,也是这道题的难点所在。

二、思路分析

这道题首先很容易想到从根节点开始,分别计算左右子节点的深度然后相加即为结果,这种思路是最容易误入的。因为最长路径很可能是不经过根节点的。那么从深度优先搜索DFS的思想出发,从某一节点开始,计算路过以该节点为根节点的最长路径,并将其与之前的最长路径进行比较,若大于当前最长路径,则新路径为最长路径,否则之前的路径仍旧为最长路径。在计算某一节点的最长路径时,即为该节点开始左右子树的深度和。那么DFS遍历这棵二叉树的每一个节点,就可以计算出这棵二叉树两叶子节点之间的最长路径了。

三、代码实现

class Solution {public:    int maxdiadepth = 0;        int dfs(TreeNode* root){                if(root == NULL) return 0;                int leftdepth = dfs(root->left);        int rightdepth = dfs(root->right);                if(leftdepth + rightdepth > maxdiadepth) {         maxdiadepth = leftdepth + rightdepth;        }        return max(leftdepth +1, rightdepth + 1);         }        int diameterOfBinaryTree(TreeNode* root) {                dfs(root);                return maxdiadepth;    }};


0 0