687. Longest Univalue Path
树的问题,递归来做。这道题考虑起来有些绕,记录一下。
对于任意一个节点,通过这个节点的最长路径是 以左节点为端点的最长路径+以右节点为端点的最长路径
因此 写一个函数 int dfs(TreeNode *root) 来计算以root为端点的最长路径,通过这个节点的最长路径在函数里计算并更新max即可。
注:543. Diameter of Binary Tree 几乎和这道题一模一样。
class Solution { public: int res=0; int longestUnivaluePath(TreeNode* root) { dfs(root); return res; } int dfs(TreeNode *root){ if (root==NULL) return 0; int leftPath=dfs(root->left); int rightPath=dfs(root->right); int l=0, r=0; if (root->left && root->left->val==root->val) l=leftPath+1; if (root->right && root->right->val==root->val) r=rightPath+1; res = max(res,l+r); return max(l,r); } };

浙公网安备 33010602011771号