二叉树的实现及二叉树的深度、广度遍历

#  [方法一:]二叉树的实现

class Node:
'''定义节点类型'''
def __init__(self, item):
'''初始化节点类'''
self.elem = item
self.lchild = None
self.rchild = None

class BinTree:
'''定义二叉树类'''
def __init__(self, root=None):
# 初始化一颗空树
self.root = root


def add_to_tree(self, item):
'''往树里边添加节点'''
node = Node(item)
if self.root is None:
self.root = node
print('根: ',self.root.elem)
else:
# 作为缓冲
q = [self.root]
# 缓冲区不为空
while True:
# 将当前缓冲区的节点弹出
cur_node = q.pop(0)
# 判断左子树空
if cur_node.lchild is None:
cur_node.lchild = node
print('左: ', cur_node.lchild.elem)
return
# 判断右子树空
elif cur_node.rchild is None:
cur_node.rchild = node
print('右: ', cur_node.rchild.elem)
return                                
else:
q.append(cur_node.lchild)
q.append(cur_node.rchild)


if __name__ == '__main__':
# 测试代码
tree = BinTree()
tree.add_to_tree(5)
tree.add_to_tree(6)
tree.add_to_tree(7)
tree.add_to_tree(8)
tree.add_to_tree(9)
tree.add_to_tree(10) 

 

 

#  [方法二:]二叉树的实现

class Node:

'''定义节点类型'''
def __init__(self, elem):
'''初始化节点类'''
self.elem = elem
self.lchild = None
self.rchild = None

class BinTree:
'''定义二叉树类'''
def __init__(self, root=None):
# 初始化一颗空树
self.root = root

def is_empty(self):
'''判断是否为空树'''
return self.root == None

def add_to_tree(self, item):
'''往树里边添加节点'''
node = Node(item)
if self.is_empty():
self.root = node
print('根: ',self.root.elem)
else:
# 作为缓冲
q = [self.root]
# 缓冲区不为空
while q:
# 将当前缓冲区的节点弹出
cur_node = q.pop(0)
# 判断左子树空
if cur_node.lchild is None:
cur_node.lchild = node
print('左: ', cur_node.lchild.elem)
return self
# 判断右子树是否空
elif cur_node.rchild is None:
                                        cur_node.rchild = node
                                        print('右:', cur_node.rchild.elem)
                                        return
                               else:
                                        q.append(cur_node.lchild)
                                        q.append(cur_node.rchild)

def DFS(root):
    '''深度遍历'''
    if root.elem is None:
        return
    # 先序
    # print(root.elem, end=' ')
    if root.lchild:
        DFS(root.lchild)
    # 中序
    # print(root.elem, end=' ')
    if root.rchild:
        DFS(root.rchild)
    # 后序
    # print(root.elem, end=' ')


def GFS(root):
    '''广度遍历'''
    if root.elem is None:
        return
    q = [root]
    while q:
        cur_code = q.pop(0)
        print(cur_code.elem, end=' ')
        if cur_code.lchild:
            q.append(cur_code.lchild)
        if cur_code.rchild:
            q.append(cur_code.rchild)


if __name__ == '__main__':
    tree = BinTree()
    print(tree.is_empty())
    tree.add_to_tree(1)
    tree.add_to_tree(2)
    tree.add_to_tree(3)
    tree.add_to_tree(4)
    tree.add_to_tree(5)
    tree.add_to_tree(6)
    tree.add_to_tree(7)
    print(tree.is_empty())
    DFS(tree.root)
    GFS(tree.root)
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值