如何在Python中创建二叉树

作者:English_yang 时间:2022-07-30 06:27:35 

目录
  • 前言

  • 二叉树节点定义

  • 递归构建二叉树

前言

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

二叉树节点定义

二叉树的节点定义如下:


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

递归构建二叉树

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

如何在Python中创建二叉树

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

如何在Python中创建二叉树

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

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

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

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

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

如何在Python中创建二叉树

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

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

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

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

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

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

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


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就是我们要的二叉树的根节点。

来源:https://blog.csdn.net/English_yang/article/details/115285234

标签:python,二叉树
0
投稿

猜你喜欢

  • 用SQL语句生成带有小计合计的数据集脚本

    2009-01-06 11:33:00
  • Apache2.4.x版wampserver本地php服务器如何让外网访问及启用.htaccess

    2023-11-04 09:27:00
  • Python基于smtplib模块发送邮件代码实例

    2022-09-18 11:07:49
  • Python环境下安装PyGame和PyOpenGL的方法

    2021-12-09 10:14:38
  • Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)

    2023-09-29 20:42:35
  • python基础教程之Hello World!

    2021-03-05 22:45:06
  • Python操作MongoDB数据库的方法示例

    2022-09-03 13:48:40
  • python 判断自定义对象类型

    2021-08-29 22:09:37
  • Python Gitlab Api 使用方法

    2021-03-11 16:30:11
  • python 每天如何定时启动爬虫任务(实现方法分享)

    2022-11-28 21:14:35
  • 创建数据表/创建列的一些asp函数

    2008-06-24 12:21:00
  • Python批量修改文本文件内容的方法

    2022-07-16 08:37:43
  • python正则分组的应用

    2022-05-24 20:50:39
  • 使用Pandas将inf, nan转化成特定的值

    2023-04-15 23:36:33
  • python四则运算表达式求值示例详解

    2023-01-31 06:03:04
  • python自动下载图片的方法示例

    2022-01-03 06:32:44
  • Python使用sklearn库实现的各种分类算法简单应用小结

    2022-08-05 22:37:59
  • 基于Django OneToOneField和ForeignKey的区别详解

    2021-10-17 11:01:21
  • Python爬虫之Selenium警告框(弹窗)处理

    2021-10-06 23:59:12
  • Facebook的特别之处是什么?

    2008-08-04 12:57:00
  • asp之家 网络编程 m.aspxhome.com