• LC 687. Longest Univalue Path


    Given a binary tree, find the length of the longest path where each node in the path has the same value. This path may or may not pass through the root.

    Note: The length of path between two nodes is represented by the number of edges between them.

    Example 1:

    Input:

                  5
                 / 
                4   5
               /    
              1   1   5
    

     

    Output:

    2
    

     

    Example 2:

    Input:

                  1
                 / 
                4   5
               /    
              4   4   5
    

     

    Output:

    2
    

     

    Note: The given binary tree has not more than 10000 nodes. The height of the tree is not more than 1000.

    Runtime: 72 ms, faster than 28.47% of C++ online submissions for Longest Univalue Path.

    对于这种不经过root的求和题往往都需要一个临时变量,然后考虑一下根节点和子节点的关系,用一个引用得到最优解。

    /**
     * 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 {
    public:
      int longestUnivaluePath(TreeNode* root) {
        int ret = 0, tmpret = 0;
        helper(root,tmpret, ret);
        return ret == 0 ? 0 : ret - 1;
      }
      int helper(TreeNode* root, int& tmpret, int& ret){
        if(!root) return 0;
        int rl = helper(root->left, tmpret, ret);
        int rr = helper(root->right, tmpret, ret);
        if(!root->left && !root->right) {
          tmpret = 1;
          //ret = 1;
          return 1;
        } else if(!root->left && root->right){
          if(root->val == root->right->val){
            tmpret = max(tmpret, rr + 1);
            ret = max(ret, tmpret);
            return 1+rr;
          } else return 1;
        } else if(root->left && !root->right){
          if(root->val == root->left->val){
            tmpret = max(tmpret, 1+rl);
            ret = max(ret, tmpret);
            return 1+rl;
          } else return 1;
        } else {
          if(root->val == root->left->val && root->val == root->right->val){
            tmpret = max(tmpret, 1+rr + rl);  
            ret = max(ret, tmpret);
            return 1+max(rr,rl);
          } else if (root->val == root->left->val){
            tmpret = max(tmpret, 1+rl);
            ret = max(ret, tmpret);
            return 1+rl;
          } else if (root->val == root->right->val){
            tmpret = max(tmpret, 1+rr);
            ret = max(ret, tmpret);
            return 1+rr;
          } else return 1;
        }
      }
    };
  • 相关阅读:
    k8s 1.10 部署springcloud
    TF-IDF关键词提取步骤
    k8s 离线安装
    JWT对SpringCloud进行系统认证和服务鉴权
    centos7 安装 docker-registry
    Docker安装elasticsearch-head监控ES步骤
    tengine 配置应用防火墙
    elasticsearch6.1.3 集成分词器
    centos7 nginx tengine 安装
    elk 搭建
  • 原文地址:https://www.cnblogs.com/ethanhong/p/10177254.html
Copyright © 2020-2023  润新知