用Python怎样创建二叉树?有什么方法?
Admin 2021-05-21 群英技术资讯 1683 次浏览
这篇文章主要给大家分享如何在Python中创建二叉树,虽然本文内容是数据结构中二叉树部分比较基础的,但是对新手理解Python创建二叉树有一定的学习参考价值,下面我们就一起来看看吧。
二叉树的节点定义如下:
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,如下图:

既然是使用递归的方法构建二叉树,主要需要理解递归的过程,这种思路将在之后的很多地方用的到。
要知道如何递归的构建二叉树,我们不能纠结于递归每一层到底干了什么,这样就会一直纠结下去(所有的递归问题都一样)。我们需要注意的是:
在递归构建二叉树的任务中,我们要做到不纠结于每一层,而是只关注该层在做什么,这样,对于下图左侧的树,我们就可以看作为右侧的树,它只有自己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创建二叉树的内容大家可以关注其他文章。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
由于字符串数据几乎无处不在,因此掌握有关字符串的交易工具非常重要。幸运的是,Python 使字符串操作变得非常简单,尤其是与其他语言甚至旧版本的 Python 相比时。本文将为大家详细介绍Python中字符串的拆分与连接,需要的可以参考一下
我们在日常工作中,常常会用到需要周期性执行的任务,下面这篇文章主要给大家介绍了关于Python脚本实现定时任务的最佳方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
这篇文章主要为大家介绍了PyTorch搭建双向LSTM实现时间序列负荷预测,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
前言上篇文章,讲了经典卷积神经网络-resnet,这篇文章通过resnet网络,做一些具体的事情。一、技术介绍总的来说,第一步首先要加载数据集,对数据进行一些处理,第二步,调整学习率一些
这篇文章主要介绍了pytorch 实现查看数据类型和大小的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008