返回介绍

lcof / 面试题55 - I. 二叉树的深度 / README

发布于 2024-06-17 01:04:42 字数 4630 浏览 0 评论 0 收藏 0

面试题 55 - I. 二叉树的深度

题目描述

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。

例如:

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

  3
   / \
  9  20
  /  \
   15   7

返回它的最大深度 3 。

 

提示:

  1. 节点总数 <= 10000

注意:本题与主站 104 题相同:https://leetcode.cn/problems/maximum-depth-of-binary-tree/

解法

方法一:递归

我们可以用递归的方法来解决这道题。递归的终止条件是当前节点为空,此时深度为 $0$;如果当前节点不为空,则当前的深度为其左右子树深度的最大值加 $1$,递归计算当前节点的左右子节点的深度,然后返回它们的最大值加 $1$。

时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 是二叉树的节点数。最坏情况下,二叉树退化为链表,递归深度达到 $n$,系统使用 $O(n)$ 大小的栈空间。

# Definition for a binary tree node.
# class TreeNode:
#   def __init__(self, x):
#     self.val = x
#     self.left = None
#     self.right = None


class Solution:
  def maxDepth(self, root: TreeNode) -> int:
    if root is None:
      return 0
    return 1 + max(self.maxDepth(root.left), self.maxDepth(root.right))
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *   int val;
 *   TreeNode left;
 *   TreeNode right;
 *   TreeNode(int x) { val = x; }
 * }
 */
class Solution {
  public int maxDepth(TreeNode root) {
    if (root == null) {
      return 0;
    }
    return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
  }
}
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *   int val;
 *   TreeNode *left;
 *   TreeNode *right;
 *   TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
  int maxDepth(TreeNode* root) {
    if (!root) {
      return 0;
    }
    return 1 + max(maxDepth(root->left), maxDepth(root->right));
  }
};
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */
func maxDepth(root *TreeNode) int {
  if root == nil {
    return 0
  }
  l, r := maxDepth(root.Left), maxDepth(root.Right)
  if l > r {
    return 1 + l
  }
  return 1 + r
}
// Definition for a binary tree node.
// #[derive(Debug, PartialEq, Eq)]
// pub struct TreeNode {
//   pub val: i32,
//   pub left: Option<Rc<RefCell<TreeNode>>>,
//   pub right: Option<Rc<RefCell<TreeNode>>>,
// }
//
// impl TreeNode {
//   #[inline]
//   pub fn new(val: i32) -> Self {
//   TreeNode {
//     val,
//     left: None,
//     right: None
//   }
//   }
// }
use std::rc::Rc;
use std::cell::RefCell;
impl Solution {
  pub fn max_depth(root: Option<Rc<RefCell<TreeNode>>>) -> i32 {
    match root {
      None => 0,
      Some(node) => {
        let mut node = node.borrow_mut();
        let left = node.left.take();
        let right = node.right.take();
        1 + Self::max_depth(left).max(Self::max_depth(right))
      }
    }
  }
}
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *   this.val = val;
 *   this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxDepth = function (root) {
  if (!root) {
    return 0;
  }
  return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
};
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *   public int val;
 *   public TreeNode left;
 *   public TreeNode right;
 *   public TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
  public int MaxDepth(TreeNode root) {
    if (root == null) {
      return 0;
    }
    return 1 + Math.Max(MaxDepth(root.left), MaxDepth(root.right));
  }
}

方法二

# Definition for a binary tree node.
# class TreeNode:
#   def __init__(self, x):
#     self.val = x
#     self.left = None
#     self.right = None


class Solution:
  def maxDepth(self, root: TreeNode) -> int:
    def dfs(root):
      if root is None:
        return 0
      l, r = dfs(root.left), dfs(root.right)
      return 1 + max(l, r)

    return dfs(root)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文