首页 > 其他分享 >Day16 | 104.二叉树的最大深度 、111.二叉树的最小深度 、222.完全二叉树的节点个数

Day16 | 104.二叉树的最大深度 、111.二叉树的最小深度 、222.完全二叉树的节点个数

时间:2024-06-07 21:11:38浏览次数:17  
标签:None right self Day16 二叉树 深度 root left

104.二叉树的最大深度 (优先掌握递归)

什么是深度,什么是高度,如何求深度,如何求高度,这里有关系到二叉树的遍历方式。

大家 要先看视频讲解,就知道以上我说的内容了,很多录友刷过这道题,但理解的还不够。

题目链接/文章讲解/视频讲解: https://programmercarl.com/0104.二叉树的最大深度.html

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxDepth(self, root: Optional[TreeNode]) -> int:
        if root is None:
            return 0
        return max(self.maxDepth(root.left),self.maxDepth(root.right)) + 1

111.二叉树的最小深度 (优先掌握递归)

先看视频讲解,和最大深度 看似差不多,其实 差距还挺大,有坑。

题目链接/文章讲解/视频讲解:https://programmercarl.com/0111.二叉树的最小深度.html

思考

左节点和右节点同时为空,才到达叶子节点。注意看下面这种情况。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def minDepth(self, root: Optional[TreeNode]) -> int:
        if root is None:
            return 0
        if root.left is None and root.right is not None:
            return self.minDepth(root.right)+1
        elif root.right is None and root.left is not None:
            return self.minDepth(root.left)+1
        else:
            return min(self.minDepth(root.left),self.minDepth(root.right))+1

222.完全二叉树的节点个数

需要了解,普通二叉树 怎么求,完全二叉树又怎么求

题目链接/文章讲解/视频讲解:https://programmercarl.com/0222.完全二叉树的节点个数.html

思考

递归版本,适合所有二叉树

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def countNodes(self, root: Optional[TreeNode]) -> int:
        if root is None:
            return 0
        return 1 + self.countNodes(root.left)+self.countNodes(root.right)

利用完全二叉树的性质,用公式来计算满二叉树的节点个数。



class Solution:
    def countNodes(self, root: Optional[TreeNode]) -> int:
        if root is None:
            return 0
        # 剪枝,利用完全二叉树性质,如果是满二叉树,直接用深度求节点数
        left = root.left
        right = root.right
        left_depth = 0
        right_depth = 0
        while left:
            left = left.left
            left_depth+=1
        while right:
            right = right.right
            right_depth+=1
        if left_depth == right_depth:
            #print(left_depth)
            return 2**(left_depth+1) -1 
        return 1 + self.countNodes(root.left)+self.countNodes(root.right) 

标签:None,right,self,Day16,二叉树,深度,root,left
From: https://www.cnblogs.com/forrestr/p/18237868

相关文章

  • 二叉链表---二叉树的简单实现
    实验内容将二叉链表视为森林的孩子兄弟链表,计算森林中叶子个数。代码实现#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<stdlib.h>#include<string.h>#defineElemTypeinttypedefstructBtree{ ElemTypeelem; structBtree*lchild,*rchild......
  • n个结点组成的二叉树有多少种不同的形态
    在算法比赛或者408数据结构里面可能会出现问n个结点组成的二叉树有多少种不同的形态,因为二叉树不是平衡二叉树也不是排序二叉树,所以组成的情况包含非常多。下面讲解一下如何推断,主要还是利用动态规划的思想。我们定义f(n)表明结点为n的二叉树的形态数一个结点只有一种情况......
  • 【机器学习】应用深度Q网络(DQN)在Atari Breakout游戏中实现智能体
    1.绪论1.1DQN是什么?DeepQ-Learning,也被称为DeepQ-Network(DQN),是一种结合了深度学习和Q-Learning的强化学习算法。以下是关于DeepQ-Learning的详细解释:背景介绍:-强化学习是一种机器学习方法,使智能体能够通过与环境互动来学习最佳行为。智能体在环境中执行动作,并接......
  • 【深度学习基础】池化层
    池化层(PoolingLayer)在卷积神经网络(CNN)中常用于计算机视觉任务,但在自然语言处理(NLP)任务中也有广泛的应用。池化层在NLP任务中可以帮助提取重要特征,降低数据维度,减少计算量,增强模型的泛化能力。本文将介绍池化层在NLP任务中的应用,并提供一个具体的代码示例。1.什么是池化层......
  • 【深度学习基础】模型文件介绍
    目录简介文件概述config.jsonmodel_state.pdparamsspecial_tokens_map.jsontokenizer_config.jsonvocab.txt文件内容解析如何查看和使用这些文件示例代码简介本文档详细介绍了深度学习训练过程中生成的关键文件,及其在模型加载和推理中的作用。这些文件包括模型配置文件......
  • 使用Python实现深度学习模型:序列到序列模型(Seq2Seq)
    本文分享自华为云社区《使用Python实现深度学习模型:序列到序列模型(Seq2Seq)》,作者:Echo_Wish。序列到序列(Seq2Seq)模型是一种深度学习模型,广泛应用于机器翻译、文本生成和对话系统等自然语言处理任务。它的核心思想是将一个序列(如一句话)映射到另一个序列。本文将详细介绍Seq2Seq......
  • 信息学奥赛初赛天天练-20-完善程序-vector数组参数引用传递、二分中值与二分边界应用
    PDF文档公众号回复关键字:2024060512023CSP-J完善程序1完善程序(单选题,每小题3分,共计30分)原有长度为n+1,公差为1等升数列,将数列输到程序的数组时移除了一个元素,导致长度为n的开序数组可能不再连续,除非被移除的是第一个或最后之个元素。需要在数组不连续时,找出......
  • Day15 | 102. 二叉树的层序遍历 、226.翻转二叉树 101. 对称二叉树
    102.二叉树的层序遍历看完本篇可以一口气刷十道题,试一试,层序遍历并不难,大家可以很快刷了十道题。题目链接/文章讲解/视频讲解:https://programmercarl.com/0102.二叉树的层序遍历.html#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0......
  • 【Android面试题】请你分别采用递归和非递归对二叉树进行遍历?
    请你分别采用递归和非递归对二叉树进行遍历?这道题想考察什么?1、二叉树的基本原理和遍历的方法?考察的知识点二叉树遍历的基本概念、二叉树的基本原理考生如何回答二叉树的基本概念当然可以!二叉树是一种常见的数据结构,它由一组称为节点的元素构成。每个节点可以有零个......
  • 二叉树的中序遍历-力扣
    二叉树的中序遍历,指首先遍历左节点,然后遍历中间节点,最后遍历右节点,按照这个顺序进行递归即可。/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullp......