美文网首页
687. 最长同值路径

687. 最长同值路径

作者: calm_peng | 来源:发表于2019-03-12 20:37 被阅读0次
    
    注意:两个节点之间的路径长度由它们之间的边数表示。
    
    示例 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 {
        int ans;
        public int longestUnivaluePath(TreeNode root) {
            ans = 0;
            arrowLength(root);
            return ans;
        }
        public int arrowLength(TreeNode node){
            if(node == null)
                return 0;
            int left = arrowLength(node.left);
            int right = arrowLength(node.right);
            int arrowLeft = 0;
            int arrowRight = 0;
            
            if(node.left != null && node.left.val == node.val)
                arrowLeft =  left + 1 ;
            if(node.right != null && node.right.val == node.val)
                arrowRight = right + 1 ;
            ans = Math.max(ans,arrowLeft + arrowRight);
            return Math.max(arrowLeft,arrowRight);
            
        }
    }
    

    看起来没什么,你自己动手写,逻辑上没什么问题,但是写不到这么美。

    ans = Math.max(ans,arrowLeft+arrowRight);
    

    这一行包含了很多东西。几种可能都在这里面体现了。
    先将
    arrowLeft = 0 ,arroeRight = 0
    后来的 都能用

    ans = Math.max(ans,arrowLeft+arrowRight);
    

    包括!

    相关文章

      网友评论

          本文标题:687. 最长同值路径

          本文链接:https://www.haomeiwen.com/subject/ooropqtx.html