zoukankan      html  css  js  c++  java
  • #leetcode543.二叉树的直径

    这道题其实也是树的长度的问题一个变种,要求出整棵树的最大路径,就是求树上两个节点之间包含边的最大数目。

    好好思考一下的话,可以得出结论,应用同样的递归方式,不断往上回溯的过程中记录好两个节点之间路径的最大值,如果大于则更新,如果不大于则不变,

    即这条语句: max = Math.max(max, left+right);

    这样在返回到根节点的时候就可以完成最大长度的计算了;

    这里可能会有的一个疑问是:

    求边的长度,按理说应该说点的长度-1才对,为什么返回的时候直接返回了left+right呢,怎么不减1呢 

    hhh 如果你跟我有相同的疑问的话,那么恭喜你赚大了,其实是因为,left + right 是左右子树的长度,你如果真的要求出所有节点的数目的话,应该是 left + right + 1!!!因为还有个父节点哈

    所以+1个父节点构成通路再减去一个点到边的转化,那么刚好就是不加不减了!所以结论就是了。

    贴一下代码吧~:

    private int max = 0;
        public int diameterOfBinaryTree(TreeNode root) {
            maxDepth(root);
            return max;
        }
    
        public int maxDepth(TreeNode root) {
    
            if (root == null)
                return 0;
    
            int left = maxDepth( root.left );
            int right = maxDepth( root.right );
    
            max = Math.max( max, left + right);
    
            return Math.max(left, right) + 1;
    
        }
  • 相关阅读:
    Python中替换的三种方法
    深入浅出:分布式和集群--转自码农翻身微信公众号
    如何把GitHub中的开源项目导入到Eclipse
    Socket Tools的使用
    LoadRunner 测试Socket接口函数说明
    Apache Jemeter 开发插件
    netstat 查看连接数
    redis缓存机制【转载】
    内存溢出OOM
    transform-translate位移
  • 原文地址:https://www.cnblogs.com/kerwins-AC/p/14448883.html
Copyright © 2011-2022 走看看