数据结构与算法(二叉树)

2018-06-20  本文已影响18人  墨痕hz

二叉树

二叉树的基本概念

二叉树是每个节点最多有两个子树的树结构,通常子树被称作“左子树”“右子树”

二叉树的性质

完全二叉树:若设二叉树的高度为h,除第h层外,其他各层(1~h-1)的节点数都达到最大数,第h层有叶子节点,并且叶子节点都是从左到右依次排布,这就是完全二叉树。

完全二叉树.png

满二叉树:除了叶节点外每一个节点都有左右子叶且叶子节点都处在最底层的二叉树。

满二叉树.png

二叉树的节点表示及树的创建

通过使用Node类中定义三个属性,分别为elem本身的值,还有lchild左孩子和rchild右孩子

class Node(object):
    """节点类"""
    def __init__(self,elem=-1,lchild=None,rchild=None):
        self.elem=elem
        self.lchild=lchild
        self.rchild=rchild

树的创建,创建一个树的类,并给一个root根节点,一开始为空,随后添加节点。

class Tree(object):
    """树类"""
    def __init__(self,root=None):
        self.root=root
        
    def add(self,elem):
        """为树添加节点"""
        node=Node(elem)
        #如果树是空的,则对根节点赋值
        if self.root==None:
            self.root=node
        else:
            queue=[]
            queue.append(self.root)
            #对已有的节点进行层次遍历
            while queue:
                #弹出队列的第一个元素
                cur=queue.pop(0)
                if cur.lchild==None:
                    cur.lchild=node
                    return
                elif cur.rchild==None:
                    cur.rchild=node
                    return
                else:
                    #如果左右子树都不为空,加入队列继续判断
                    queue.append(cur.lchild)
                    queue.append(cur.rchild)
                    
                    
if __name__=='__main__':
    tree=Tree()
    tree.add(1)
    tree.add(2)
    tree.add(3)
    tree.add(4)
    tree.add(5)
上一篇 下一篇

猜你喜欢

热点阅读