python二叉树

二叉树的自我理解


二叉树作为一个Python中的典型,其实质就是一个分叉形式的数组,以一个节点开始,每次延伸出两个左右子节点,无限延伸直到没有子节点。

这些节点看似散乱,实际上是可以根据某种规律来按顺序读出来的,这就可以看做是一种专门的读取方法。假设最上级是一个总文件夹,后面的内容都是文件夹的下一级,二叉树的遍历方式就可以稳当的读出所有文件。

二叉树的遍历方式


我已知二叉树有四种遍历方式,前序,中序,后序和按层遍历。
二叉树简便示意图:
                           A
                        ↙  ↘
                      B         C
A为该节点的父节点也称为根节点,B是左子节点,C是右子节点。
其中前序的排列方式为根左右,把每三个关联的小节点综合一起看,都作为根左右的形式,如果是更多子节点的情况,看似略有复杂,但也依旧是以这种方式来看。
三层二叉树:
             A
         ↙  ↘
      B          C
   ↙ ↘     ↙ ↘
 D       E  F      G
前序:先把BDF,CFG看做是A的左右子节点,因此是从A开始读,A作为第一个,然后进到左子节点 BDE, 这时再把它看做一个小二叉树看待,其
顺序为BDF,读完这个,以A为根的三个结构就读完了根左,然后剩下CFG,这时在读CFG。到此为止,这组二叉树的前序组合为ABDRCFG,这种读法
从上往下,从根开始,把下面所有节点结构都以根左右的形式读取,遇到有子节点的情况变读左子节点,读完再读右。总结其格式:从根开始,找左,
以左为根,找左,若无,找右,以右为根,找左,若无,找右,若无,找上一级
右,以此类推。
中序:先把BDF,CFG看做是A的左右子节点,A1,A2。中序的读法为左根右,A1,A,A2。然后再看A1,D为左,B为中,E为右,D为叶节点
(无子节点了),因此从D开始DBE,A1读完,然后为A,再看A2,A2为FCG,因此中序的顺序为:DBE>A>FCG。
后序:左右根,A1,A2,A。A1在左右根:DEB,A2是FGC,A1,A2,A便是DEBFGCA。
按层遍历,其意义不大,就是按层来看,从上往下,从左往右,没错,就是ABCDEFG。
二叉树形式看似就是一种文件夹格式,其用处在于查找,插入数值和删除,在具体的,由于知识有限,还不能说出来。。。


做一个生成二叉树的python文件
首先创建一个节点类,每次实例化出对象时,作为父节点的存在,默认值为#,存在两个子节点为None:
 

class Note(object):
    def __init__(self):
        self.data = '#'
        self.l_tree = None
        self.r_tree = None

接着创建tree类,继承于节点类:其中有方法为创建树结构:

class Tree(Note):#创建树类
    def create_tree(self,tree):#方法:创建树
        data = raw_input('->')#输入一个值data作为节点
        if data == '#':#当输入一个值为#时,树为空,不再创建子节点
            tree = None
        else:
            tree.data = data#当输入不为空时,树的节点值为data
            tree.l_tree = Note()#实例化左子节点
            self.create_tree(tree.l_tree)#左子节点调用创建树方法,创建下级左子树
            tree.r_tree = Note()#实例化右子节点
            self.create_tree(tree.r_tree)#右子节点调用创建树方法,创建下级右子树

 转载自:https://blog.csdn.net/qq_36197940/article/details/77482493

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值