2019-05-31:创建二叉树

#encoding=utf-8
class Node:
    def __init__(self,value):
        self.var = value
        self.left = None
        self.right = None


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

    def add(self, value):#此方法为二叉树添加一个节点
        node = Node(value)  #把值封装到node节点里面
        if self.root is None:#二叉树是否为空
            self.root = node #插入的节点变为了根节点
        else:#二叉树里面已经有节点
            q = [self.root]  #把根节点放到一个列表里面
            #q列表被当做一个队列来使用。
            while True:
                pop_node = q.pop(0)
                if pop_node.left is None:
                    #如果左节点是空,那么插入新的节点
                    pop_node.left = node
                    return
                elif pop_node.right is None:
                    #如果右节点是空,那么插入新的节点
                    pop_node.right = node
                    return
                else:
                    q.append(pop_node.left)
                    q.append(pop_node.right)
                    #类似广度遍历的思想,逐一节点
                    #从最上次节点开始查找,空的位置
                    #找到空的位置就插入,然后return

    def traverse(self):  # 二叉树的广度遍历的程序
        if self.root is None:
            return None
        q = [self.root]
        res = [self.root.var]
        while q != []:
            pop_node = q.pop(0)
            if pop_node.left is not None:
                q.append(pop_node.left)
                res.append(pop_node.left.var)
                #print(q)

            if pop_node.right is not None:
                q.append(pop_node.right)
                res.append(pop_node.right.var)
        return res

t = BinaryTree()
for i in range(10):
    t.add(i)
print('层序遍历:',t.traverse())

猜你喜欢

转载自blog.csdn.net/sinat_18722099/article/details/90714714