• 最长同值路径


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

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

    示例 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;
        }
    };
  • 相关阅读:
    顾问和注解
    正则
    GitHub 的简单使用
    JavaScript变态题目
    常用的Javascript设计模式
    HTML5 本地裁剪上传图片
    webpack 打包
    详解js闭包
    常用的Javascript设计模式
    call appiy
  • 原文地址:https://www.cnblogs.com/tianzeng/p/12002334.html
Copyright © 2020-2023  润新知