• 算法练习-LeetCode Hot 100 543. 二叉树的直径


    今日心情:为了offer冲冲冲!

    题目描述:

    LeetCode Hot 100 543. 二叉树的直径

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

     


    解题代码:

    1. /**
    2. * Definition for a binary tree node.
    3. * public class TreeNode {
    4. * int val;
    5. * TreeNode left;
    6. * TreeNode right;
    7. * TreeNode() {}
    8. * TreeNode(int val) { this.val = val; }
    9. * TreeNode(int val, TreeNode left, TreeNode right) {
    10. * this.val = val;
    11. * this.left = left;
    12. * this.right = right;
    13. * }
    14. * }
    15. */
    16. class Solution {
    17. int maxd=0;
    18. public int diameterOfBinaryTree(TreeNode root) {
    19. if(root == null){return 0;}
    20. int depth = process(root);
    21. System.out.print(depth+" ");
    22. return maxd;
    23. }
    24. public int process(TreeNode x){
    25. if(x == null){return 0;}
    26. int left = process(x.left);
    27. int right = process(x.right);
    28. maxd = Math.max(left+right,maxd); //更新最大路径长度
    29. return Math.max(left,right)+1; //返回根节点最大子树深度
    30. }
    31. }

    解题思路:(看的题解 + 自己的理解)

    递归:找树的左右最大深度,将左右树的最大深度相加然后记录在全局变量中,然后不断递归更新最大值,递归最终完成的时候,已经回溯到最终根节点,此时全局变量记录的就是整个树的最长路径。(主要思想:分别找左右子树的最深的深度,更新最大值,记录最大总路径值)

    递归函数 process(TreeNode x)

    1. public int process(TreeNode x){
    2. if(x == null){return 0;}
    3. int left = process(x.left);
    4. int right = process(x.right);
    5. maxd = Math.max(left+right,maxd); //更新最大路径长度
    6. return Math.max(left,right)+1; //返回根节点最大子树深度
    7. }

    以下面为例子树进行说明👇 

    -- 通过递归x.left一直到x.left为null的时候,返回 0,然后递归当前节点的 x.right为null, 返回0;此时全局变量 maxd 取最大 为0,节点7处 返回max(L,R) +1 为 1;同理节点5 处 返回 max(L,R) +1 为 1。

    --然后到第二层,节点7 返回 1 作为节点9的 Left, 节点5 返回 1 作为节点9 的Right,然后maxd更新为2,此时节点9 返回max(L,R) +1 为 2;而节点8 返回按之前类似节点7和5一样返回1。

            

     -- 然后到最后根节点处,节点9返回2作为根节点3的Left,节点8返回1作为根节点3的Right,此时maxd更新为3,根节点无法再进行回溯,此时递归完成。

     -- 最终最大路径更新为3,返回。


    小结:

    主要是要想到如何获取左右子树的最大深度,然后如何更新最大长度路径。

  • 相关阅读:
    微调baichuan2-7b遇到的显存坑
    【从零学习python 】73. UDP网络程序-发送数据
    cad怎么转换成pdf格式?cad转pdf的方法有哪些?
    2分钟快速安装 `nginx` 和配置 `keepalived`
    FlinkSQL-- sql-client及源码解析 -- flink-1.13.6
    fmp4打包H265视频流
    SpringBoot整合redis与缓存使用
    SpringCloud微服务架构
    (数据科学学习手札153)基于martin的高性能矢量切片地图服务构建
    Harbor密码丢失,如何处理?
  • 原文地址:https://blog.csdn.net/qq_41758969/article/details/125495696