python写一个二叉树

先来设计下怎么实现二叉树,首先一个节点类和树类是需要的,所以需要class node 和class tree

class node:
   def __init__(self):
       pass

class tree:
   def __init__(self):
       pass

接下来是看功能,节点和树需要实例化,同时树需要一个add方法来把新的节点加进去,可以确定的是,无论是树实例化时根节点是空的,节点类实例化时则是有数的。

class Node(object):
    def __init__(self,number):
        self.number=number
        self.rchild=None
        self.lchild=None


class Tree(object):
    def __init__(self):
        self.root=None

    def add(self,number):
        pass
                

接下来就是核心问题,怎么把增加新节点,第一步当然要先判断树是否为空

def add(self,number):
    node=Node(number)
    if self.root==None:
        self.root=node
    else:
        pass

在确定树不为空之后要怎么处理呢?

我们来看下二叉树的结构

         由于这里只是单纯的二叉树,而不是排序二叉树,所以不需要考虑数的大小关系等,也就是说可以按先后顺序插入顺序可以设计成root,root->left,root-rght这样,好处在于,root插入后,root左右为空,这时插入root->left,然后再是root->right,这样能够确保root的2个子节点都有值,而不至于绕过root->rigth直接插入root->left->left这样的异常情况出现。

         基于这样的设计,我们使用list来存储任意子节点为空的节点,换句话说,只要你这个节点不是左右节点都存在的情况下,我下次插入节点就会考虑你。具体实现我们使用list来模拟队列,root,root->left,root->right依次入队,

class Node(object):
    def __init__(self,number):
        self.number=number
        self.lchild=None
        self.rchild=None


class Tree(object):

    lis=[]
    def __init__(self):
        self.root=None

    def add(self,number):
        node=Node(number)

        if self.root==None:
            self.root=node
            Tree.lis.append(self.root)
        else:
            while True:
                point=Tree.lis[0]

                if point.lchild==None:
                    point.lchild=node
                    Tree.lis.append(point.lchild)
                    return
                elif point.rchild==None:
                    point.rchild=node
                    Tree.lis.append(point.rchild)
                    Tree.lis.pop(0)
                    return

        add基本的逻辑就是利用队列依次保存未满状态的节点,然后通过不断取队头来添加左右孩子,并把左右孩子加入队列,插入完后检查是否走有孩子都有了,依然未满,则保留,满了,则退出队列取下一个队首。

       现在我们来测试:

if __name__=='__main__':
    t=Tree()
    L = [1,2,3,4,5,6,7]
    for x in L:
        t.add(x)
        print 'success'

E:\protalenv\Scripts\python.exe C:/Users/26954/Desktop/shel.py
success
success
success
success
success
success
success

Process finished with exit code 0

可以看到二叉树成功的建立了

猜你喜欢

转载自blog.csdn.net/wzngzaixiaomantou/article/details/81294915
今日推荐