• 二叉树-28最大深度29二叉树路径和


    28.求二叉树最大深度

    在这里插入图片描述
    思路就是和层次遍历一样,只是不需要数组存对应的值,只要记录层数即可,还是用队列,时间复杂度和空间复杂度都是O(n)

    import java.util.*;
    
    /*
     * public class TreeNode {
     *   int val = 0;
     *   TreeNode left = null;
     *   TreeNode right = null;
     * }
     */
    
    public class Solution {
        /**
         * 
         * @param root TreeNode类 
         * @return int整型
         */
        public int maxDepth (TreeNode root) {
            // write code here
            if(root==null) return 0;
            Deque<TreeNode> q = new ArrayDeque<>();
            q.offer(root);
            int lay = 0;
            while(!q.isEmpty()){
                int count = q.size();//每一层的个数         
                while(count-- >0){
                    TreeNode node = q.poll();
                    if(node.left!=null) q.offer(node.left);
                    if(node.right!=null) q.offer(node.right);
                }
                lay++;           
            }
            return lay;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    第二种用递归的方法,树的深度=max(左子树深度,右子树深度)+1
    代码十分简洁,时间复杂度和空间复杂度都是O(n)

    import java.util.*;
    
    /*
     * public class TreeNode {
     *   int val = 0;
     *   TreeNode left = null;
     *   TreeNode right = null;
     * }
     */
    
    public class Solution {
        /**
         * 
         * @param root TreeNode类 
         * @return int整型
         */
        public int maxDepth (TreeNode root) {
            // write code here
            if(root==null) return 0;
            return Math.max(maxDepth(root.left), maxDepth(root.right))+1;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    29. 二叉树中和为某一值的路径(一)

    在这里插入图片描述
    在这里插入图片描述
    用递归判断,错了好几次,错在边界条件的判断,要注意两点:

    • 路径一定是要到叶节点的,到中间某个节点相等也是不行的
    • 数据包含负数,不能用val>sum作为返回false的边界条件

    时间复杂度和空间复杂度都是O(N)

    import java.util.*;
    
    /*
     * public class TreeNode {
     *   int val = 0;
     *   TreeNode left = null;
     *   TreeNode right = null;
     * }
     */
    
    public class Solution {
        /**
         * 
         * @param root TreeNode类 
         * @param sum int整型 
         * @return bool布尔型
         */
        public boolean hasPathSum (TreeNode root, int sum) {
            // write code here
            if(root==null) return false;
            if(root.val==sum){
                //还没到叶节点就相等了也不行
                if(root.left==null&&root.right==null) return true;
            }
            return hasPathSum(root.left, sum-root.val)||hasPathSum(root.right,sum-root.val);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    location.href&&window.open
    【改进极限学习机】双向极限学习机(B-ELM)(Matlab代码实现)
    vite 和 webpack 的区别
    【AI工程化】 如何让AI在企业多快好省的落地,提高生产效率?
    10. 结束语
    迅为RK3588开发板Linux安卓12瑞芯微ARM核心板人工智能工业AI主板
    Unity WebGL RuntimeError: integer overflow(整数溢出问题)
    websocket flv 客户端解封包
    离线数仓 (十) --------- 数仓环境搭建
    基于深度学习的人脸表情识别的AR川剧变脸(二)
  • 原文地址:https://blog.csdn.net/Sophia2333333331/article/details/126343984