687.最长同值路径
链接:687.最长同值路径
难度:Medium
标签:树、深度优先搜索、二叉树
简介:给定一个二叉树的 root ,返回 最长的路径的长度 ,这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。
题解 1 - cpp
- 编辑时间:2022-09-02
- 执行用时:84ms
- 内存消耗:49.9MB
- 编程语言:cpp
- 解法介绍:递归,每次记录以根结点起的最长链路和子节点的最长内部链路。
#define MAX(a, b) ((a) > (b) ? (a) : (b))
int longestUnivaluePath(struct TreeNode *root){
    if (!root) return 0;
    int ans = 0;
    _longestUnivaluePath(root, &ans);
    return ans - 1;
}
int _longestUnivaluePath(struct TreeNode *root, int *ans) {
    if (!root) return 0;
    int cnt1 = 1, cnt2 = 1,
        left = _longestUnivaluePath(root->left, ans),
        right = _longestUnivaluePath(root->right, ans);
    if (root->left && root->left->val == root->val) cnt1 = MAX(cnt1, 1 + left), cnt2 += left;
    if (root->right && root->right->val == root->val) cnt1 = MAX(cnt1, 1 + right), cnt2 += right;
    *ans = MAX(*ans, cnt1);
    *ans = MAX(*ans, cnt2);
    return cnt1;
}