JAVA练习305- 二叉树的最大深度
题目概览
给定一个二叉树root,返回其最大深度。
二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
输入:root = [3,9,20,null,null,15,7]输出:3
示例 2:
输入:root = [1,null,2]输出:2
提示:
- 树中节点的数量在
[0, 10^4]区间内。 -100 <= Node.val <= 100
来源:104. 二叉树的最大深度 - 力扣(LeetCode)
解题分析
方法一:深度优先搜索
当前节点就是一层,然后只需要知道左边节点和右边节点中的最大深度,就能得到答案,用递归即可。
时间复杂度:O(n)
空间复杂度:O(n)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public int maxDepth(TreeNode root) { if (root == null) { return 0; } return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1; } }方法二:广度优先搜索
使用队列一层一层遍历,记录层数即可。
时间复杂度:O(n)
空间复杂度:O(n)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public int maxDepth(TreeNode root) { if (root == null) { return 0; } Queue<TreeNode> dq = new LinkedList<>(); dq.offer(root); int maxDepth = 0; while(!dq.isEmpty()) { int size = dq.size(); while(size-- > 0) { TreeNode node = dq.poll(); if (node.left != null) { dq.offer(node.left); } if (node.right != null) { dq.offer(node.right); } } maxDepth++; } return maxDepth; } }