104. 二叉树的最大深度

104. 二叉树的最大深度

 

 

1. 使用DFS解法

递归计算每颗字数的最大深度

时间O(n)(每个节点都要被遍历一次),空间O(h)(与递归深度有关,递归深度又与二叉树高度相关)

public int maxDepth(TreeNode root) {
        if (root==null) return 0;
        int left = maxDepth(root.left);
        int right = maxDepth(root.right);
        // 比较左右子树的最大深度,并加上根节点的高度
        return Math.max(left,right)+1;
    }

 

2. 使用BFS解法

广度优先遍历的方案,我们使用2层循环,一个循环控制整棵树所有节点是否遍历完比

第二层循环控制每一层的节点是否遍历完毕。

时间O(n)(每个元素都遍历一遍),空间O(m)(m为整棵树节点最对的一层的节点数,最坏情况下完全二叉树叶子节点个数n/2)

    public int maxDepth(TreeNode root) {
        if (root==null) return 0;
        Deque<TreeNode> queue = new LinkedList<TreeNode>();
        queue.add(root);
        int res=0;
        while(!queue.isEmpty()){
            int size = queue.size();
            // 获取当前队列中的节点个数,即获取整棵树每一层的节点个数
            while(size>0){
                TreeNode temp = queue.poll();
                if(temp.left!=null) queue.add(temp.left);
                if(temp.right!=null) queue.add(temp.right);
                // 本层节点-1
                size--;
            }
            // 每扫描完一层需要将相应深度+1
            res++;
        }
        return res;
    }

 

上一篇:刷题-力扣-104


下一篇:第104天: Python 解析 XML