LeetCode.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.

分析:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    private int max=0;
    public int longestUnivaluePath(TreeNode root) {
        //给定二叉树,找出一条所有节点均为相同值的最长路径。
        //思路:递归查找是否同根节点相同。定义一个全局变量
        //注意:递归返回最长的一边,即单边最大值
        if(root==null) return 0;
        backtrace(root);
        return max;
    }
    
    //递归
    public int backtrace(TreeNode root){
        int left=root.left!=null?backtrace(root.left):0;
        int right=root.right!=null?backtrace(root.right):0;
        //递归判断是否根节点等于左右
        int resLeft=root.left!=null&&root.val==root.left.val?left+1:0;
        int resRight=root.right!=null&&root.val==root.right.val?right+1:0;
        
        max=Math.max(max,resLeft+resRight);
        //返回最长的一边
        return Math.max(resLeft,resRight);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值