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;
        }
    }
    
  • 相关阅读:
    做题经验
    4906 删数问题
    1225 八数码难题
    1005 生日礼物
    1004 四子连棋 未完成
    1008 选数 2002年NOIP全国联赛普及组
    1068 乌龟棋 2010年NOIP全国联赛提高组
    2292 图灵机游戏
    实战数据结构(9)_单链表实现多项式的相乘
    最近招两个兼职的活(PHP和JSP)
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13074800.html
Copyright © 2011-2022 走看看