二叉树的最大深度
给定一个二叉树 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;}
}