云小杰

相对于绝对成功的汲汲渴求,越无杂质的奔赴,越是动人。

要一个黄昏, 满是风, 和正在落下的夕阳。如此, 足够我爱这破碎泥泞的人间。


Download the theme

二叉树的最大深度

104. 二叉树的最大深度

题目描述

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例: 给定二叉树 [3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3

方法一:层次遍历

可以使用层次遍历的方法,定义一个队列 deque,每一次将二叉树整行的节点存入队列,这样就可以根据循环的次数判断出二叉树的高度。

/**
 * 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 height = 0;
        Deque<TreeNode> deque = new LinkedList<>();
        deque.add(root);
        while (!deque.isEmpty()) {
            int size = deque.size();
            for (int i=0;i<size;++i) {
                TreeNode node = deque.poll();
                if (node.left!=null) {
                    deque.add(node.left);
                }
                if (node.right !=null) {
                    deque.add(node.right);
                }
            }
            height++;
        }
        return height;
    }
}

方法二:深度优先遍历

假设左子树和右子树的最大深度分别为 leftrighe,那么该二叉树的最大深度即为 max(left,right)+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;
        return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
    }
}
最近的文章

复数乘法

537. 复数乘法题目描述复数 可以用字符串表示,遵循 "实部+虚部i" 的形式,并满足下述条件: 实部 是一个整数,取值范围是 [-100, 100] 虚部 也是一个整数,取值范围是 [-100, 100] i2 == -1给你两个字符串表示的复数 num1 和 num2 ,请你遵循复数表示形式,返回表示它们乘积的字符串。示例1:输入:num1 = "1+1i", num2 = "1+1i"输出:"0+2i"解释:(1 + i) * (1 + i) = 1 + i2 + 2 * i...…

继续阅读
更早的文章

球会落何处

1706. 球会落何处题目描述用一个大小为 m x n 的二维网格 grid 表示一个箱子。你有 n 颗球。箱子的顶部和底部都是开着的。箱子中的每个单元格都有一个对角线挡板,跨过单元格的两个角,可以将球导向左侧或者右侧。 将球导向右侧的挡板跨过左上角和右下角,在网格中用 1 表示。 将球导向左侧的挡板跨过右上角和左下角,在网格中用 -1 表示。在箱子每一列的顶端各放一颗球。每颗球都可能卡在箱子里或从底部掉出来。如果球恰好卡在两块挡板之间的 “V” 形图案,或者被一块挡导向到箱子的任意一...…

继续阅读