二叉树--二叉树的最大深度

Posted 算法和数据结构

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树--二叉树的最大深度相关的知识,希望对你有一定的参考价值。

来源:LeetCode

难度:简单

描述:

        给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。


示例1:

给定二叉树:[3, 9, 20, null, null, 15, 7],如下

返回 3

分析:这个题其实就是让咱们找到二叉树的层数,直接上代码吧


题外话:对于二叉树、图类型的题目一般考察的都是深度搜索和广度搜索,所以掌握这两种搜索方法对解树和图类型的题很有帮助


解题


方法一:递归求解(深度)

思路:递归左右子树,找到子树中层数较大的那个,那么该根节点所在的深度就是 max(left.dept, right.dept) + 1


代码:

 1public int maxDepth(TreeNode root) {
2    if (root == null) {
3        return 0;
4    } else {
5        //找到左节点深度
6        int leftHeight = maxDepth(root.left);
7        //找到右节点深度
8        int rightHeight = maxDepth(root.right);
9        //当前节点深度= max(左节点深度, 右节点深度) + 1
10        return Math.max(leftHeight, rightHeight) + 1;
11    }
12}

时间复杂度:O(n) n为二叉树节点个数

空间复杂度:O(h) h为二叉树深度


方法二:层序遍历求解(广度)

思路:采用层序遍历的方式,将每层的节点放到队列中,每层节点不为空时(队列不为空),深度  + 1


代码:

 1public int maxDepth(TreeNode root) {
2    if(root == null) {
3        return 0;
4    }
5    //定义队列,存放每层节点数
6    Queue<TreeNode> queue = new LinkedBlockingQueue<>();
7    int depth = 0;
8    queue.add(root);
9    while (!queue.isEmpty()) {
10        int size = queue.size();
11        //深度加1
12        depth++;
13        //将上一次的所有节点出队,同时将下一层的节点全部入队
14        while (size > 0) {
15            TreeNode treeNode = queue.poll();
16            if (treeNode != null && treeNode.left != null) {
17                queue.add(treeNode.left);
18            }
19            if (treeNode != null && treeNode.right != null) {
20                queue.add(treeNode.right);
21            }
22            size--;
23        }
24    }
25    return depth;
26}

时间复杂度:O(n) n为二叉树节点个数

空间复杂度:O(n) 当二叉树只有两层时,队列中最多存放 n个节点


以上仅是个人思路解法,觉得还不错欢迎点赞关注分享


往期精彩推荐



扫描下方二维码,关注公众号,更多精彩等你发现


以上是关于二叉树--二叉树的最大深度的主要内容,如果未能解决你的问题,请参考以下文章

代码题— 二叉树的深度

二叉树——高度和深度

104. 二叉树的最大深度

LC 二叉树的最大深度

二叉树9:二叉树的最大深度

二叉树的最大深度 递归