二叉树--二叉树的最大深度
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个节点
以上仅是个人思路解法,觉得还不错欢迎点赞关注分享
往期精彩推荐
以上是关于二叉树--二叉树的最大深度的主要内容,如果未能解决你的问题,请参考以下文章