使用代码中的类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()
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.')
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()
>>> 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
F
E