最长同值路径

时间:2019-12-07
本文章向大家介绍最长同值路径,主要包括最长同值路径使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。

注意:两个节点之间的路径长度由它们之间的边数表示。

示例 1:

输入:

              5
             / \
            4   5
           / \   \
          1   1   5

输出:

2
示例 2:

输入:

              1
             / \
            4   5
           / \   \
          4   4   5

输出:

2
注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。

code

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
private:
    int longestUnivaluePathCore(TreeNode* node,int &maxPath)
    {
        if(!node)
            return 0;
        
        int leftRes=longestUnivaluePathCore(node->left,maxPath);//1.返回值为包含根节点的单侧最长路径
        int rightRes=longestUnivaluePathCore(node->right,maxPath);
        int leftPath=0,rightPath=0;        
        if(node->left&&node->val==node->left->val)
            leftPath=leftRes+1;//2.不能++leftRes,因为当前节点不一定与子树的值相同,不相同的时递归返回值为0
        if(node->right&&node->val==node->right->val)
            rightPath=rightRes+1;
        
        maxPath=max(maxPath,leftPath+rightPath);//3.最长路径可能是包含根节点的双侧最长路径
        return max(leftPath,rightPath);//返回单侧最长路径
    }
public:
    int longestUnivaluePath(TreeNode* root) {
        if(!root)
            return 0;

        int maxPath=0;
        longestUnivaluePathCore(root,maxPath);
        return maxPath;
    }
};

原文地址:https://www.cnblogs.com/tianzeng/p/12002334.html