zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 687 最长同值路径(递归)

    687. 最长同值路径

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

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

    示例 1:

    输入:

       5
         / 
        4   5
       /    
      1   1   5
    

    输出:

    2
    示例 2:

    输入:

        1
         / 
        4   5
       /    
      4   4   5
    

    输出:

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

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        private int maxL = 0;
        
        public int longestUnivaluePath(TreeNode root) {
           
            if(root == null) return 0;
            getMaxL(root, root.val);
            return maxL;
        }
        
        private int getMaxL(TreeNode r, int val) {
            if(r == null) return 0;
            int left = getMaxL(r.left, r.val);
            int right = getMaxL(r.right, r.val);
            maxL = Math.max(maxL, left+right); // 路径长度为节点数减1所以此处不加1
            if(r.val == val) // 和父节点值相同才返回以当前节点所能构成的最长通知路径长度, 否则返回0
                return Math.max(left, right) + 1;
            return 0;
        }
    }
    
  • 相关阅读:
    hdu4639 hehe ——斐波纳契数列,找规律
    codefoces round193a
    codeforces 192e
    abbyy cup a
    年中总结
    codeforces 192a
    codeforces 192b
    codeforces 192 c
    codeforces 192 D
    codeforces magic five --快速幂模
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946283.html
Copyright © 2011-2022 走看看