page contents

python基础编程100例:第58期-基础结构:二叉树 二叉树的最大深度

本文讲述了python基础编程100例:第58期-基础结构:二叉树 二叉树的最大深度!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2022-03-nloWDuag623d191ebd715.png

本文讲述了python基础编程100例:第58期-基础结构:二叉树 二叉树的最大深度!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

第58期-基础结构:二叉树 二叉树的最大深度

1 问题描述

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。


示例 1:

attachments-2022-03-egbN2DX9623d18f9ea58d.png

输入: root = [1,None,2,3]

输出: 3


示例 2:

输入: root = []

输出: 0


示例 3:

输入: root = [1]

输出: 1


示例 4:

attachments-2022-03-2EPpVRYz623d18ef7ddc0.png

输入: root = [1,2]

输出: 2


示例 5:

attachments-2022-03-60mVxDyq623d18e7169eb.png

输入: root = [1,None,2]

输出: 2


初始代码


from typing import List

class TreeNode:

    def __init__(self, x):

        self.val = x

        self.left = None

        self.right = None


def list_to_binarytree(nums):

    if nums==[]:return 

    b=root=TreeNode(nums[0])

    a=[]

    i=1

    while i < len(nums):

        if nums[i]:

            root.left=TreeNode(nums[i])

            a.append(root.left)

        if i+1<len(nums):

            if nums[i+1]:

                root.right=TreeNode(nums[i+1])

                a.append(root.right)

        i+=2

        root=a.pop(0)

    return b



root = list_to_binarytree([1,None,2,3,None,4,5,6,7,8])


class Solution:

    def maxDepth(self, root: TreeNode) -> int:

        #在此填写代码


print(Solution().maxDepth(list_to_binarytree([1,None,2,3])))

print(Solution().maxDepth(list_to_binarytree([])))

print(Solution().maxDepth(list_to_binarytree([1])))

print(Solution().maxDepth(list_to_binarytree([1,2])))

print(Solution().maxDepth(list_to_binarytree([1,None,2])))


2 解题思路

要求最大深度1,可以求出每条树枝的长度,最终取出最大值

当节点为None时,深度为0

若有子树,则子树头结点深度加1,直到没有子树为止


3 解题方法

from typing import List

class TreeNode:

    def __init__(self, x):

        self.val = x

        self.left = None

        self.right = None


def list_to_binarytree(nums):

    if nums==[]:return 

    b=root=TreeNode(nums[0])

    a=[]

    i=1

    while i < len(nums):

        if nums[i]:

            root.left=TreeNode(nums[i])

            a.append(root.left)

        if i+1<len(nums):

            if nums[i+1]:

                root.right=TreeNode(nums[i+1])

                a.append(root.right)

        i+=2

        root=a.pop(0)

    return b


class Solution:

    def maxDepth(self, root: TreeNode) -> int:

        if not root :return 0

        else:

            return max(self.maxDepth(root.right),self.maxDepth(root.left)) +1


print(Solution().maxDepth(list_to_binarytree([1,None,2,3])))

print(Solution().maxDepth(list_to_binarytree([])))

print(Solution().maxDepth(list_to_binarytree([1])))

print(Solution().maxDepth(list_to_binarytree([1,2])))

print(Solution().maxDepth(list_to_binarytree([1,None,2])))

第1-26,31-35行: 题目中已经给出的信息,运行代码时要根据这些代码进行编辑(具体为创建二叉树以及列表、二叉树转换)

第27行: 若此节点为None返回深度为0

第28行: 对此节点左子树、右子树深度进行比较,此时已经有源节点所以深度加1,选出左右子树的深度最大值(左右子树深度是递归得来的)


代码运行结果为:

attachments-2022-03-YcWa8h3y623d18ca675a1.png

结构讲解

这里用到了基础结构:二叉树,简单讲解下这个二叉树:

链表

二叉树(Binary tree)是树形结构的一个重要类型。

许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。

attachments-2022-03-zLPcW2rq623d18c05377c.png

二叉树特点是每个结点最多只能有两棵子树,且有左右之分。

结点:包含一个数据元素及若干指向子树分支的信息

结点的度:一个结点拥有子树的数目称为结点的度

叶子结点:也称为终端结点,没有子树的结点或者度为零的结点

分支结点:也称为非终端结点,度不为零的结点称为非终端结点

树的度:树中所有结点的度的最大值

结点的层次:从根结点开始,假设根结点为第1层,根结点的子节点为第2层,依此类推,如果某一个结点位于第L层,则其子节点位于第L+1层

树的深度:也称为树的高度,树中所有结点的层次最大值称为树的深度

有序树:如果树中各棵子树的次序是有先后次序,则称该树为有序树

序树:如果树中各棵子树的次序没有先后次序,则称该树为无序树

森林:由m(m≥0)棵互不相交的树构成一片森林。如果把一棵非空的树的根结点删除,则该树就变成了一片森林,森林中的树由原来根结点的各棵子树构成

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-w60ySZBd62908ba87e5a0.jpeg

  • 发表于 2022-03-25 09:21
  • 阅读 ( 453 )
  • 分类:Python开发

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1312 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章