Leetcode104. 二叉树的最大深度

本文详细解析了LeetCode104题——二叉树的最大深度,通过递归和迭代两种方法提供了清晰的解决方案。使用Scala和Java代码实现,帮助读者理解如何计算二叉树从根节点到最远叶子节点的最长路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Leetcode104. 二叉树的最大深度

题目:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:

给定二叉树 [3,9,20,null,null,15,7],
	   3
	  / \
	 9  20
	/ \
  15   7
返回它的最大深度 3 。

题解:
递归、迭代
scala代码如下:
递归:

/**
    * 递归
    *
    * @param root
    * @return
    */
  def maxDepth(root: TreeNode): Int = {
    if (root == null) {
      0
    } else {
      val max_left_depth = maxDepth(root.left)
      val max_right_depth = maxDepth(root.right)
      Math.max(max_left_depth, max_right_depth) + 1
    }

迭代:

 /**
    * 迭代
    *
    * @param root
    * @return
    */
  def maxDepth2(root: TreeNode): Int = {
    val stack: util.Stack[(TreeNode, Int)] = new util.Stack[(TreeNode, Int)]()
    if (root != null) {
      stack.add((root, 1))
    }
    var depth = 0
    while (!stack.empty()) {
      val tuple = stack.pop()
      val key = tuple._1
      val value = tuple._2
      if(key!=null){
        depth = Math.max(depth, value)
        stack.add((key.left, depth + 1))
        stack.add((key.right, depth + 1))
      }
    }
    depth
  }

java代码:

 public static int maxDepth(TreeNode root) {
        if (root == null) return 0;

        Stack<Pair<TreeNode, Integer>> stack = new Stack<>();
        stack.add(new Pair<>(root, 1));
        int depth = 0;
        while (!stack.isEmpty()) {
            Pair<TreeNode, Integer> pop = stack.pop();
            TreeNode treeNode = pop.getKey();
            Integer value = pop.getValue();
            depth = Math.max(depth, value);
            if (treeNode.left != null) stack.add(new Pair<>(treeNode.left, depth + 1));
            if (treeNode.right != null) stack.add(new Pair<>(treeNode.right, depth + 1));
        }
        return depth;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值