【数据结构】二叉树


class Node:
    def __init__(self, val=0, left=None, right=None):
        self.elem = val
        self.lchild = left
        self.rchild = right


class BinaryTree:
    def __init__(self):
        self.root = None

    def add(self, item):
        node = Node(item)
        if self.root is None:
            self.root = node
            return
        queue = [self.root]
        while queue:
            cur_node = queue.pop(0)
            if cur_node.lchild is None:
                cur_node.lchild = node
                return
            else:
                queue.append(cur_node.lchild)
            if cur_node.rchild is None:
                cur_node.rchild = node
                return
            else:
                queue.append(cur_node.rchild)

    def breadth_travel(self):
        """广度遍历: 方法同add, 是一种反过来的操作
        """
        # 使用队列
        queue = [self.root]
        ret = []
        if self.root is None:
            return
        while queue:
            cur_node = queue.pop(0)
            # 打印结点值
            # print(cur_node.elem, end=" ")
            ret.append(cur_node.elem)
            if cur_node.lchild:
                queue.append(cur_node.lchild)
            if cur_node.rchild:
                queue.append(cur_node.rchild)
        print(ret)


if __name__ == '__main__':
    btree = BinaryTree()
    btree.add(0)
    btree.breadth_travel()
    btree.add(1)
    btree.breadth_travel()
    btree.add(2)




posted @ 2022-07-12 10:56  倒骑驴子  阅读(23)  评论(0编辑  收藏  举报