如何在Python中创建二叉树

 更新时间:2021年03月30日 14:39:39   作者:English_yang  
这篇文章主要介绍了如何在Python中创建二叉树,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下

前言

本文的内容是数据结构中二叉树部分最基础的,之所以写一下主要是为了方便刷题的时候,能够在自己电脑上很快的使用这种小的demo进行复杂的练习。

二叉树节点定义

二叉树的节点定义如下:

class TreeNode():#二叉树节点
  def __init__(self,val,lchild=None,rchild=None):
    self.val=val		#二叉树的节点值
    self.lchild=lchild		#左孩子
    self.rchild=rchild		#右孩子

递归构建二叉树

本文使用的前序递归构建的方法(其余顺序读者自行变化,本文主要意在如何快速构建能够执行的二叉树)
例如,我们想构建一个如下图所示的树(其前序遍历结果为:abcde):

这里我们需要使用到扩展的二叉树,也就是要告诉计算机什么是叶结点,什么是空节点,否侧无法分辨左右节点。例如先序遍历的顺序为"abcde",扩展的二叉树前序序列为:“abc##d##e##”,#代表此处节点为None,如下图:

既然是使用递归的方法构建二叉树,主要需要理解递归的过程,这种思路将在之后的很多地方用的到。
要知道如何递归的构建二叉树,我们不能纠结于递归每一层到底干了什么,这样就会一直纠结下去(所有的递归问题都一样)。我们需要注意的是:

  1. 在我们的任务中,终止条件是什么?
  2. 在我们的任务中,本次递归要干嘛?
  3. 在我们的任务中,本次递归要返回给上一次递归的是啥?

在递归构建二叉树的任务中,我们要做到不纠结于每一层,而是只关注该层在做什么,这样,对于下图左侧的树,我们就可以看作为右侧的树,它只有自己a (a),左子树B (bcd)和右子树C (e)。

这样我们需要注意的那三个问题的回答自然就有了(做递归问题,心中要想着怎么回答这三个问题):

  • 在我们的任务中,终止条件是什么?

[给我们的字符用完,也就不需要再创建节点了]

  • 在我们的任务中,本次递归要干嘛?

[本次递归要创建三个节点,一个根节点,一个左节点,一个右节点]

  • 在我们的任务中,本次递归要返回给上一次递归的是啥?

[当然是返回一个本层构造好的树的根节点]
理解了上述三个问题的回答,递归的代码自然可以写出:

def Creat_Tree(Root,val):
  if len(vals)==0:#终止条件:val用完了
    return Root
  if vals[0]!='#':#本层需要干的就是构建Root、Root.lchild、Root.rchild三个节点。
    Root = TreeNode(vals[0])
    vals.pop(0)
    Root.lchild = Creat_Tree(Root.lchild,val)
    Root.rchild = Creat_Tree(Root.rchild,val)
    return Root#本次递归要返回给上一次的本层构造好的树的根节点
  else:
    Root=None
    vals.pop(0)
    return Root#本次递归要返回给上一次的本层构造好的树的根节点

看懂了上述内容,构建一棵我们想象的二叉树就很简单了,只要输入一个我们心目中前序遍历扩展的二叉树序列即可:

if __name__ == '__main__':
  Root = None
  strs="abc##d##e##"#前序遍历扩展的二叉树序列
  vals = list(strs)
  Roots=Creat_Tree(Root,vals)#Roots就是我们要的二叉树的根节点。

以上就是如何在Python中创建二叉树的详细内容,更多关于Python创建二叉树的资料请关注脚本之家其它相关文章!

相关文章

  • 在Python中marshal对象序列化的相关知识

    在Python中marshal对象序列化的相关知识

    这篇文章主要介绍了在Python中marshal对象序列化的相关知识,是Python进阶学习中序列化相关的知识,需要的朋友可以参考下
    2015-07-07
  • Pandas reindex重置索引的使用

    Pandas reindex重置索引的使用

    本文主要介绍了Pandas reindex重置索引的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • python 中的 asyncio 异步协程

    python 中的 asyncio 异步协程

    这篇文章主要介绍了python 中的 asyncio 异步协程 IO 教程,asyncio 执行的任务,称为协程,但是Asyncio 并不能带来真正的并行,下文具体的相关资料感兴趣的小伙伴可以参考一下
    2022-04-04
  • 超详细注释之OpenCV构建透明的叠加层

    超详细注释之OpenCV构建透明的叠加层

    这篇文章主要介绍了OpenCV构建透明的叠加层,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Python使用pyinstaller实现学生管理系统流程

    Python使用pyinstaller实现学生管理系统流程

    pyinstaller是一个非常简单的打包python的py文件的库,下面这篇文章主要给大家介绍了关于Python Pyinstaller库安装步骤以及使用方法的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • 关于Python的Thread线程模块详解

    关于Python的Thread线程模块详解

    这篇文章主要介绍了关于Python的Thread线程模块详解,进程是程序的一次执行,每个进程都有自己的地址空间、内存、数据栈以及其他记录其运行的辅助数据,需要的朋友可以参考下
    2023-05-05
  • 查看keras各种网络结构各层的名字方式

    查看keras各种网络结构各层的名字方式

    这篇文章主要介绍了查看keras各种网络结构各层的名字方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • NumPy统计函数的实现方法

    NumPy统计函数的实现方法

    这篇文章主要介绍了NumPy统计函数的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • python实现密码验证合格程序的思路详解

    python实现密码验证合格程序的思路详解

    这篇文章主要介绍了python实现密码验证合格程序的思路详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Python利用pandas和matplotlib实现绘制圆环图

    Python利用pandas和matplotlib实现绘制圆环图

    在可视化的过程中,圆环图是一种常用的方式,特别适合于展示各类别占比情况,本文将介绍如何使用 Python中的 pandas 和 matplotlib 库,来制作一个店铺销量占比的圆环图,需要的可以参考下
    2023-11-11

最新评论