【数据结构】二叉树的python实现
本博文描述的二叉树是任意二叉树,可以使完全二叉树,也可以是非完全二叉树。
首先声明一个二叉树节点的初始化类TNode,每一个节点都有三个组成部分,节点的元素值,节点的左子树地址和节点的右子树地址。
class TNode(object):
#初始化二叉树的节点,self.val是节点的数值,self.left是节点左子树的地址,self.right是右子树的地址。
def __init__(self,val):
self.val = val
self.left = None
self.right = None
然后定义二叉树的类CBT,其中包括二叉树根节点的初始化函数__init__,添加新节点到二叉树中的函数add,计算二叉树深度的函数getDepth,判断二叉树是否为空的函数isEmpty,采用递归方法层序遍历二叉树的函数floor_travel,采用递归方法先序遍历二叉树的函数front_travel,采用递归方法层中序历二叉树的函数middle_travel和采用递归方法后序遍历二叉树的函数back_travel。
class CBT(object):
#初始化根节点
def __init__(self):
self.root = None
#将新的节点添加到二叉树中
def add(self,data):
'''
将data加入到完全二叉树作为一个节点
'''
node = TNode(data)
#如果二叉树为空,将节点作为根节点
if self.isEmpty():
self.root = node
#否则按照左右顺序添加节点,将节点作为二叉树的一个节点
else:
my_queue = []
my_queue.append(self.root)
while my_queue:
cur_node = my_queue.pop(0)
#如果当前节点为空节点,直接跳过
if cur_node.val is None:
continue
if cur_node.left == None:
cur_node.