【LeetCode】104-二叉树的最大深度
2020-02-16 本文已影响0人
Liori
题目
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7](示例图已省略,可点击顶部标题查看原题),返回它的最大深度 3 。
解法1:迭代法
-
解题思路
迭代法的实现和层序遍历相似,每遍历完一层,深度+1,当遍历完成时便可得到最大深度。
和层序遍历不同的是,需要记录下一层的节点个数 levelSize,当 levelSize 为 0 时,则意味着已遍历完一层,深度+1。 -
代码
class Solution {
/**
* 迭代法
*/
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
// 每层的节点个数
int levelSize = 1;
int maxDepth = 0;
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
levelSize--;
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
// 遍历完一层,最大深度+1,并设置下一层的节点个数
if (levelSize == 0) {
levelSize = queue.size();
maxDepth++;
}
}
return maxDepth;
}
}
递归法
-
解题思路
分别递归遍历左右子树,因为不一定是满二叉树,所以需要比较左右子树。 -
代码
class Solution {
/**
* 递归法
*/
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
}
return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
}
}