携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情
1. 引言
接下来继续下一题开展对应leetcode 习题课中初级算法题目的练习,这个就当我的学习笔记了,大家一起交流,让我们一起学习变得更好吧! 官网地址:leetcode.cn/leetbook/re…
2. 题型
- 二叉树的最大深度 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 补充说明: 叶子节点是指没有子节点的节点。
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
首先在我们解题前我们先来了解下二叉树的相关概念:
-
基本概念:二叉树表示是n个有限元素的集合,该集合或者为空、或由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组合而成
-
基本术语: 结点之间的关系:如果当一个结点有子树,那么该结点被我们称为子树根的双亲节点,子树的根称为该结点的孩子。①并且有相同双亲的结点互为兄弟节点;②一个结点的所有子树上的任何结点都是该结点的后裔; ③从根结点到某个结点的路径上的所有结点都是该结点的祖先;
概念
结点层:根结点的层定义为第一层,根的孩子为第二层,依此类推
树的深度:树中最大的结点层
结点的度:结点拥有的子树的个数
树的度: 树中最大的结点度
叶子结点:也叫终端结点,是度为 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;
}
};