初级算法练习第六节

136 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情

1. 引言

接下来继续下一题开展对应leetcode 习题课中初级算法题目的练习,这个就当我的学习笔记了,大家一起交流,让我们一起学习变得更好吧! 官网地址:leetcode.cn/leetbook/re…

2. 题型

  1. 二叉树的最大深度 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 补充说明: 叶子节点是指没有子节点的节点。
    3
   / \
  9  20
    /  \
   15   7


返回它的最大深度 3 。

首先在我们解题前我们先来了解下二叉树的相关概念:

  1. 基本概念:二叉树表示是n个有限元素的集合,该集合或者为空、或由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组合而成

  2. 基本术语: 结点之间的关系:如果当一个结点有子树,那么该结点被我们称为子树根的双亲节点,子树的根称为该结点的孩子。①并且有相同双亲的结点互为兄弟节点;②一个结点的所有子树上的任何结点都是该结点的后裔; ③从根结点到某个结点的路径上的所有结点都是该结点的祖先;

    概念

    结点层:根结点的层定义为第一层,根的孩子为第二层,依此类推
    树的深度:树中最大的结点层
    结点的度:结点拥有的子树的个数
    树的度: 树中最大的结点度
    叶子结点:也叫终端结点,是度为 0 的结点
    分枝结点:度不为0的结点

3.性质:

  • 在二叉树的第 i 层上最多有2^(i-1)个结点(i>=1
  • 深度为h的二叉树,最多有2^h-1个结点,最少有h个结点(h>=1)
    
  • 包含n个结点的二叉树的高度至少为(log2n)+1
    
  • 在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1
    

思路:
首先判断临界值,其次只需要递归循环左子树和右子树后,拿到他们的相对根元素的最长子树深度,后两者对比,取其最大深度值,该题结束。 时间复杂度:O(n)

解答:

/**
 * 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;
    } else {
        const left = maxDepth(root.left);
        const right = maxDepth(root.right);
        return Math.max(left, right) + 1;
    }
};