Leetcode 687 最长同值路径

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

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

示例 1:

输入:




Solution:

有三种不同的情况:

左边子树路径最长,在左子树中若相同根节点不同则置为0,相同加一

右边子树路径最长,在有子树中若是相同根节点不同则置为0,相同加一

左右子树加上根节点路径最长。

/**

* 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) {

        path(root,root);

        return max;

    }

    public int path(TreeNode node,TreeNode root){

        if(root==null||node==null) return 0;

        int left = path(node.left,node);         //左边路径和

        int right = path(node.right,node);    //右边路径和

        left = (node.left!=null&&node.left.val==node.val)?left+1:0;

        right = (node.right!=null&&node.right.val==node.val)?right+1:0;

        max = Math.max(left+right,max);   //取最大

        return Math.max(left,right);           //返回左右子树中的最大值。


    }


}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容