一、使用Python构建一个简易版的二叉树
class Tree:
def __init__(self, data):
self.data = data
self.left_child = None
self.right_child = None
def insertLeft(self, newNode):
if self.left_child == None:
self.left_child = Tree(newNode)
else:
t = Tree(newNode)
t.left_child = self.left_child
self.left_child = t
def insertRight(self, newNode):
if self.right_child == None:
self.right_child = Tree(newNode)
else:
t = Tree(newNode)
t.right_child = self.right_child
self.right_child = t
def get_right_child(self):
return self.right_child
def get_left_child(self):
return self.left_child
def set_value(self, data):
self.data = data
def get_value(self):
return self.data
if __name__ == '__main__':
root = Tree('a')
# 构建右子树
root.insertRight('b')
# 构建左子树
root.insertLeft('c')
# 构建左子树的左右子树
root.get_left_child().insertRight('d')
print(root.get_left_child().get_right_child().get_value())
基本能实现树的结构存储数据,但是功能比较简单
二、二叉树的遍历操作
对一个数据集的所有数据项进行访问的操作称为遍历。树的非线性特点使得遍历操作较为复杂。根据对结点访问次序,将遍历区分为三种形式:
前序遍历:先访问根节点,再递归的前序访问左子树、最后前序访问右子树。
中序遍历: 先递归的中序访问左子树,再访问根节点,最后中序访问右子树。
后序遍历:先递归的后序访问左子树,在后序访问右子树,最后访问根节点。
def preorder(tree):
"""
递归前序遍历树
:param tree:
:return:
"""
if tree:
print(tree.get_value())
preorder(tree.get_left_child())
preorder(tree.get_right_child())
def postorder(tree):
"""
后序遍历
:param tree:
:return:
"""
if tree != None:
postorder(tree.get_left_child())
postorder(tree.get_right_child())
print(tree.get_value())
def inorder(tree):
"""
中序遍历树
:param tree:
:return:
"""
if tree != None:
postorder(tree.get_left_child())
print(tree.get_value())
postorder(tree.get_right_child())