1.创建树结构
首先定义一个完整的二叉树结构,根节点、左子树、右子树
class BinaryTree(object):
def __init__(self, rootObj):
self.key = rootObj
self.leftChild = None
self.rightChild = None
添加插入功能
def insertLeft(self, newNode):
if self.leftChild is None:
self.leftChild = BinaryTree(newNode)
else:
t = BinaryTree(newNode)
t.leftChild = self.leftChild
self.leftChild = t
完整类代码:
class BinaryTree(object):
def __init__(self, rootObj):
self.key = rootObj
self.leftChild = None
self.rightChild = None
def insertLeft(self, newNode):
if self.leftChild is None:
self.leftChild = BinaryTree(newNode)
else:
t = BinaryTree(newNode)
t.leftChild = self.leftChild
self.leftChild = t
def insertRight(self, newNode):
if self.rightChild is None:
self.rightChild = BinaryTree(newNode)
else:
t = BinaryTree(newNode)
t.rightChild = self.rightChild
self.rightChild = t
def getRightChild(self):
return self.rightChild
def getLeftChild(self):
return self.leftChild
def setRootVal(self,obj):
self.key = obj
def getRootVal(self):
return self.key
2.生成树
我们生成一个像这样的树
生成树代码
r = BinaryTree('0')
r.insertLeft('1')
r.insertRight('2')
r.getLeftChild().insertLeft('3')
r.getLeftChild().insertRight('4')
r.getRightChild().insertLeft('5')
r.getRightChild().insertRight('6')
r.getLeftChild().getLeftChild().insertLeft('7')
r.getLeftChild().getLeftChild().insertRight('8')
r.getLeftChild().getRightChild().insertLeft('9')
3.遍历树
前中后序递归遍历
# 中序遍历:遍历左子树,访问当前节点,遍历右子树
def mid_travelsal(root):
if root.getLeftChild() is not None:
mid_travelsal(root.getLeftChild())
# 访问当前节点
print(root.getRootVal())
if root.getRightChild() is not None:
mid_travelsal(root.getRightChild())
# 前序遍历:访问当前节点,遍历左子树,遍历右子树
def pre_travelsal(root):
print(root.getRootVal())
if root.getLeftChild() is not None:
pre_travelsal(root.getLeftChild())
if root.getRightChild() is not None:
pre_travelsal(root.getRightChild())
# 后序遍历:遍历左子树,遍历右子树,访问当前节点
def post_trvelsal(root):
if root.getLeftChild() is not None:
post_trvelsal(root.getLeftChild())
if root.getRightChild() is not None:
post_trvelsal(root.getRightChild())
print(root.getRootVal())
print('===============中序=====================')
mid_travelsal(r)
print('=====================================')
print('================前序=====================')
pre_travelsal(r)
print('=====================================')
print('================后序=====================')
post_trvelsal(r)
print('=====================================')