二叉树的最大深度
给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:3 示例 2:
输入:root = [1,null,2] 输出:2
递归法
/**
* 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;
}
int leftDepth = maxDepth(root.left);//递归遍历左子树
int rightDepth = maxDepth(root.right);//递归遍历右子树
return Math.max(leftDepth, rightDepth) + 1;//返回最大深度的子树
}
}
/**
* 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;
}
Deque<TreeNode> deque = new LinkedList<>();
//根 进入队列
deque.offer(root);
int depth = 0;//深度 = 层数
while(!deque.isEmpty()) {
//在每个循环中,首先记录当前队列中节点的数量size,这就是当前层的节点数。
int size = deque.size();
depth++;
//遍历当前层的所有节点,依次从队列中取出一个节点。
for(int i = 0; i < size; i++){
TreeNode node = deque.poll();
//对于取出的节点,如果它有左子节点,则将左子节点加入队列
if(node.left != null){
deque.offer(node.left);
}
//如果它有右子节点,则将右子节点加入队列。
if(node.right != null){
deque.offer(node.right);
//这样,下一层的所有节点就被加入到了队列中,准备在下一次循环时被访问。
}
}
}
return depth;
}
}