zoukankan      html  css  js  c++  java
  • #leetcode687.最长同值路径

     

     最长同值路径,就是相同值组成的节点路径中最长的路径的边的个数,不要求一定是从根节点到叶子节点。

    所以,先看下题解的代码:

    int maxPath = 0;
        //给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
        public int longestUnivaluePath(TreeNode root) {
            dfs(root);
            return maxPath;
        }
    
        public int dfs(TreeNode root) {
    
            if(root == null)
                return 0;
    
            int left = dfs(root.left);
            int right = dfs(root.right);
    
            int leftPath = root.left !=null && root.left.val == root.val ? left + 1 : 0;
            int rightPath = root.right != null && root.right.val == root.val ? right + 1 : 0;
    
            maxPath = Math.max(maxPath, leftPath + rightPath);
    
            return Math.max(leftPath, rightPath);
        }

    设置一个全局变量maxPath;然后是调用dfs递归函数。dfs是深度优先遍历;

    如果root == null的情况下直接返回0;

    然后是深度优先遍历 int left = dfs(root.left) + int right = dfs(root.right);

    left和right返回的结果后续再分析

    接下来是本题目的重点,就是 如果左节点的val和当前root节点的val相等,那么leftPath就可以在当前的left返回值上+1,而如果不相等则直接清零;

    同理,如果右节点的val和root的val相等的话,rightPath的值可以在当前的right的返回值上+1,而如果不相等,的话同样也需要清零;

    最后是返回值问题,因为它决定了left和right值的具体意义,这边是Math.max(leftPath, rightPath)

    就是说当前函数作用域内的主节点的最大可能的路径的数目;这样逐渐积累,当回溯到根节点的时候,就能得到同值的最大路径的长度了;

  • 相关阅读:
    Privacy Policy
    MINE
    IOS的浅拷贝和深拷贝
    Mine
    IOS8Preview-xCode_6
    IOS8Preview-Huge for developer and Massive for everyone else
    java-Filter
    Java-servlet
    Java-基本的程序设计结构
    银行应用系统安全性设计(3):密钥及其管理
  • 原文地址:https://www.cnblogs.com/kerwins-AC/p/14460574.html
Copyright © 2011-2022 走看看