python 数据结构与算法 day05 二叉树

1. 二叉树

二叉树:每个节点最多有两个子节点(两个度);

完全二叉树: 除了最下面一层,其他层的节点数都是该层最大的节点数;

满二叉树:所有层的节点都是最大数目;

平衡二叉树:任意两个节点的度相差 不能超过1;

排序二叉树:二叉树节点中数的存储都是按照原序列的顺序来存的;

2. 代码实现

class Node(object):
    """创建一个节点类"""
    def __init__(self,item):
        self.item=item  # 创建的能挂在树上的节点 得有一个data数据域 还得有两个左右节点指向左右子节点(因为实现的是二叉树,每个节点最多两个子节点)
        self.lchild=None  # 当前节点的左子节点
        self.rchild=None  # 当前节点的右子节点

class Tree(object):
    """构建二叉树"""
    def __init__(self):
        self.root=None  # 构建的一棵树首先得有一个根节点(就像链表有一个头节点self.__head)

    def add(self,item):
        """实现二叉树添加元素"""
        node=Node(item)
        queue=[]  # 队列(把当前树的所有节点都存放在队列中,然后挨个取出队列中的元素,判断该节点的做右子节点是否都存在,不存在就挂在当前节点的相应自节点位置上)
        if self.root is None:  # 如果当前树是一个空树 直接就把要添加的元素放在根节点上就好啦
            self.root=node
            return
        queue.append(self.root)  # 先把树的根节点放在队列中,也就是从根节点开始遍历
        while queue:
            cur_node=queue.pop(0) # queue队列存放的是当前树所有节点(没有被遍历过的) 然后挨个取出节点,遍历做右子节点
            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)

tree=Tree()
tree.add(2)

总结:对于二叉树的实现,首先需要构建一个节点类,用于后续构建二叉树时添加节点元素使用到,在给树添加新的节点时需要广度优先遍历所有层的节点是否左右子节点都存在,对于不存在的子节点,直接把要添加的节点放上去就好啦,问题是已经存在的节点需要用队列(其实也就是列表,不一定非去实现里面的很多方法,只是在使用时就按照 在一侧添加append 在另一侧取值pop 也就是当成队列来使用即可)

talk is cheap,show me the code
原文地址:https://www.cnblogs.com/xuanxuanlove/p/9953892.html