zoukankan      html  css  js  c++  java
  • LeetCode 21.二叉树的直径 DFS深度遍历

    题目描述

    给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。

    示例 :
    给定二叉树

            1
           /
          2  3
         /
       4   5
    返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。

    注意:两结点之间的路径长度是以它们之间边的数目表示。

    解题思路

    任意两个节点之间的边数都可能是最大直径

    最大的直径不一定包括根节点

    这道题很容易有的误区就是:从根节点出发,找到左边数的最大深度 leftDepth,再找到右边树的最大深度 rigthDepth

    然后 return leftDepth+rigthDepth + 1(如果二叉树的根节点深度为0的话)

     

     

    从上面的图可以看出,情况并不是这样,因为最大值不一定要包含根节点。

    从上面的分析可知,最大值不一定包含根节点,但是一定是:经过一个节点,该节点左右子树的最大深度之和 +1+1(二叉树的根节点深度为 00)
    于是,可以使用 DFS,找出所有节点的最大直径,在取出最大值 res;

    定义一个全局变量 res,用来记录最大直径
    使用 dfs(root) 遍历所有的节点,dfs(root) 的作用是:找出以 root 为根节点的二叉树的最大深度

    将根节点的深度定义为 11(和上面分析的深度定义不一样)
    root 为跟节点的最大深度为 Math.max(leftDepth,rigthDepth) + 1
    res 取值为以经过 root,左右子树的最大深度之和 leftDepth + rigthDepth(不用加 11,是因为根节点的深度是 11)
    通过递归,找到 res 的最大值

     

     

     

     

     作者:sugar-31

    链接:https://leetcode-cn.com/problems/diameter-of-binary-tree/solution/java-shen-du-you-xian-bian-li-dfs-by-sugar-31/

    代码如下

    /**
     * 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 diameterOfBinaryTree(TreeNode root) {
            dfs(root);
            return max;
    
       }    
        private int dfs(TreeNode root){
        if(root==null){
            return 0;
        }
        int leftHight=dfs(root.left);
        int rightHight=dfs(root.right);
        max=Math.max(leftHight+rightHight,max);
        return Math.max(leftHight,rightHight)+1;
        }
    
    
    
    
    }
  • 相关阅读:
    Jasper_crosstab_Parameter_Crosstab Header
    Jasper_style
    Linux_hadoop_install
    Linux_jdk path (execute and install)
    Linux_install mod_ssl openssl apache
    Linux_install jdk
    Linux_service cloudera-scm-server start failed
    Linux_ERROR 1045 (28000): Access denied for user 'root'@'localhost'
    Jasper_table_Cloud not resolve style(s)
    Linux_shell条件判断if中的-a到-z的意思
  • 原文地址:https://www.cnblogs.com/Transkai/p/12458576.html
Copyright © 2011-2022 走看看