python复杂数据结构之二叉树

使用代码中的类BinaryTree创建的对象不仅支持二叉树的创建以及前序遍历、中序遍历与后序遍历等三种常用的二叉树节点遍历方式,还支持二叉树中任意“子树”的遍历。

class BinaryTree:
    def __init__(self, value):
        self.__left = None
        self.__right =  None
        self.__data = value
       
    def insertLeftChild(self, value):  #创建左子树
        if self.__left:
            print('__left child tree already exists.')
        else:
            self.__left = BinaryTree(value)
            return self.__left
    def insertRightChild(self, value): #创建右子树
        if self.__right:
            print('Right child tree already exists.')
        else:
            self.__right = BinaryTree(value)
            return self.__right
    def show(self):
        print(self.__data)
    def preOrder(self):                 #前序遍历
        print(self.__data)                #输出根节点的值
        if self.__left:
            self.__left.preOrder()      #遍历左子树
        if self.__right:
            self.__right.preOrder()    #遍历右子树
    def postOrder(self):                 #后序遍历
        if self.__left:
            self.__left.postOrder()
        if self.__right:
            self.__right.postOrder()
        print(self.__data)
    def inOrder(self):                 #中序遍历
        if self.__left:
            self.__left.inOrder()
        print(self.__data)
        if self.__right:
            self.__right.inOrder()

if __name__ == '__main__':
    print('Please use me as a module.')
以上为二叉树的数据架构,下面构造出一个二叉树:

>>> import BinaryTree    #此处导入需要在把class的文件目录写到安装目录的环境变量中的基础上,上一篇已经提过
>>> root = BinaryTree.BinaryTree('root')
>>> b = root.insertRightChild('B')
>>> a = root.insertLeftChild('A')
>>> c = a.insertLeftChild('C')
>>> d = c.insertRightChild('D')
>>> e = b.insertRightChild('E')
>>> f = e.insertLeftChild('F')
>>> root.inOrder()
C
D
A
root
B
F
E
>>> root.postOrder()
D
C
A
F
E
B
root
>>> b.inOrder()
B
F
E

猜你喜欢

转载自blog.csdn.net/eacxzm/article/details/80039308