Python数据结构实现二叉树

树的定义

树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形象表示。树在计算机领域中也得到广泛应用,如在编译源程序时,可用树表示源程序的语法结构。又如在数据库系统中,树型结构也是信息的重要组织形式之一。一切具有层次关系的问题都可用树来描述。

树结构的特点是:它的每一个结点都可以有不止一个直接后继,除根结点外的所有结点都有且只有一个直接前驱。

树的递归定义如下:

  • 至少有一个结点(称为根)
  • 其它是互不相交的子树

二叉树

二叉树是由n(n≥0)个结点组成的有限集合、每个结点最多有两个子树的有序树。它或者是空集,或者是由一个根和称为左、右子树的两个不相交的二叉树组成。

特点:

  • 二叉树是有序树,即使只有一个子树,也必须区分左、右子树;
  • 二叉树的每个结点的度不能大于2,只能取0、1、2三者之一;
  • 二叉树中所有结点的形态有5种:空结点、无左右子树的结点、只有左子树的结点、只有右子树的结点和具有左右子树的结点。

源代码:

#-*- encoding:utf-8 -*-

'''
树的构建:
     5
  6     7
8         9
'''

class Tree():
   '树的实现'
    def __init__(self,ltree = 0,rtree = 0,data = 0):
        self.ltree = ltree
        self.rtree = rtree
        self.data = data
class BTree():
    '二叉树的实现'
    def __init__(self,base = 0):
        self.base = base
    def _Empty(self):
        '是否为空树'
        if self.base == 0:
            return True
        else:
            return False
    def qout(self,tree_base):
        '前序遍历:根-左-右'
        if tree_base == 0:
            return
        print tree_base.data
        self.qout(tree_base.ltree)
        self.qout(tree_base.rtree)
    def mout(self,tree_base):
        '中序遍历:左-根-右'
        if tree_base == 0:
            return
        self.mout(tree_base.ltree)
        print tree_base.data
        self.mout(tree_base.rtree)
    def hout(self,tree_base):
        '后序遍历:左-右-根'
        if tree_base == 0:
            return
        self.hout(tree_base.ltree)
        self.hout(tree_base.rtree)
        print tree_base.data
#test

tree1 = Tree(data=8)
tree2 = Tree(data=9)
tree3 = Tree(tree1,data=6)
tree4 = Tree(tree2,0,data=7)
base = Tree(tree3,tree4,5)
btree = BTree(base)
print '前序遍历结果:'
btree.qout(btree.base)
print '中序遍历结果:'
btree.mout(btree.base)
print '后序遍历结果:'
btree.hout(btree.base)
    原文作者:狗子渣渣
    原文地址: https://www.jianshu.com/p/e86bc2c0d51c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞