美文网首页
python二叉树操作

python二叉树操作

作者: 爱搞事的喵 | 来源:发表于2018-11-27 17:53 被阅读0次

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

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

3.树的递归定义如下:
(1)至少有一个结点(称为根)
(2)其它是互不相交的子树

  1. 二叉树: 
    二叉树是由n(n≥0)个结点组成的有限集合、每个结点最多有两个子树的有序树。它或者是空集,或者是由一个根和称为左、右子树的两个不相交的二叉树组成。
    特点:
    (1)二叉树是有序树,即使只有一个子树,也必须区分左、右子树;
    (2)二叉树的每个结点的度不能大于2,只能取0、1、2三者之一;
    (3)二叉树中所有结点的形态有5种:空结点、无左右子树的结点、只有左子树的结点、只有右子树的结点和具有左右子树的结点。

5.树的遍历顺序大体分为三种:前序遍历(先根遍历、先序遍历),中序遍历(中根遍历),后序遍历(后根遍历)。

代码实现:

class TreeNode(object):
    def __init__(self,data=0,left=0,right=0):
        self.data = data
        self.left = left
        self.right = right

class BTree(object):
    def __init__(self,root=0):
        self.root = root

    def is_empty(self):
        '''
        判断二叉树是不是为空
        :return:
        '''
        if self.root == 0:
            return True
        return False

    def preOrder(self,treeNode):
        '''
        先序遍历: 根节点>左节点>右节点
        :return:
        '''
        if treeNode is 0:
            return
        print('------------preOrder-------------%s',treeNode.data)
        self.preOrder(treeNode.left)
        self.preOrder(treeNode.right)


    def inOrder(self,treeNode):
        '''
        中序遍历:左节点>根节点>右节点
        :return:
        '''
        if treeNode is 0:
             return
        self.inOrder(treeNode.left)
        print('--------------inOrder-------------%s',treeNode.data)
        self.inOrder(treeNode.right)

    def postOrder(self,treeNode):
        '''
        后续遍历:右节点>左节点>根节点
        :return:
        '''
        if treeNode is 0:
           return
        self.postOrder(treeNode.right)
        self.postOrder(treeNode.left)
        print("-------------postOrder--------------%s",treeNode.data)



n1 = TreeNode(data=1)
n2 = TreeNode(2,n1)
n3 = TreeNode(3)
n4 = TreeNode(4,n2,n3)
n5 = TreeNode(5,n4)
n6 = TreeNode(6,n5)
n7 = TreeNode(7)
root = TreeNode('root',n6,n7)
bt = BTree(root)
bt.preOrder(bt.root)
bt.inOrder(bt.root)
bt.postOrder(bt.root)


相关文章

网友评论

      本文标题:python二叉树操作

      本文链接:https://www.haomeiwen.com/subject/osknqqtx.html