2201_75949574 2023-04-10 18:45 采纳率: 80%
浏览 50
已结题

python顺序存储二叉树

如何用代码实现二叉树顺序存储,实现查找,求高度先,中,后,层次遍历

  • 写回答

3条回答 默认 最新

  • 个人练习生xx 2023-04-10 19:27
    关注

    下面是二叉树顺序存储实现,包括查找,求高度,先序遍历,中序遍历,后序遍历和层次遍历的详细代码

    class BinaryTree:
        def __init__(self, size):
            self.data = [None] * size
            self.size = size
    
        def get_parent_index(self, index):
            return (index - 1) // 2 if index > 0 else -1
    
        def get_left_child_index(self, index):
            left_child_index = index * 2 + 1
            return left_child_index if left_child_index < self.size else -1
    
        def get_right_child_index(self, index):
            right_child_index = index * 2 + 2
            return right_child_index if right_child_index < self.size else -1
    
        def get_height(self):
            height = 0
            level_size = 1
            while level_size <= self.size:
                height += 1
                level_size *= 2
            return height - 1
    
        def insert(self, value):
            if None not in self.data:
                return False
    
            self.data[self.data.index(None)] = value
            return True
    
        def find(self, value):
            for i in range(self.size):
                if self.data[i] == value:
                    return i
            return -1
    
        def pre_order_traversal(self, index):
            if index == -1:
                return
    
            print(self.data[index], end=" ")
            self.pre_order_traversal(self.get_left_child_index(index))
            self.pre_order_traversal(self.get_right_child_index(index))
    
        def in_order_traversal(self, index):
            if index == -1:
                return
    
            self.in_order_traversal(self.get_left_child_index(index))
            print(self.data[index], end=" ")
            self.in_order_traversal(self.get_right_child_index(index))
    
        def post_order_traversal(self, index):
            if index == -1:
                return
    
            self.post_order_traversal(self.get_left_child_index(index))
            self.post_order_traversal(self.get_right_child_index(index))
            print(self.data[index], end=" ")
    
        def level_order_traversal(self):
            for i in range(self.size):
                if self.data[i] is not None:
                    print(self.data[i], end=" ")
    
        def __str__(self):
            return str(self.data)
    
    tree = BinaryTree(7)
    tree.insert(2)
    tree.insert(3)
    tree.insert(5)
    tree.insert(7)
    tree.insert(1)
    tree.insert(6)
    
    print(tree.pre_order_traversal(0)) # 2 1 3 5 7 6
    print(tree.in_order_traversal(0)) # 1 2 3 5 6 7
    print(tree.post_order_traversal(0)) # 1 6 7 5 3 2
    print(tree.level_order_traversal()) # 2 1 3 5 7 6
    print(tree.get_height()) # 2
    
    
    

    以上代码实现的是完全二叉树的顺序存储,并不适用于普通的二叉树,但是一般不会让你写不标准的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月19日
  • 已采纳回答 4月11日
  • 创建了问题 4月10日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分