数据结构之二叉树汇总额

   二叉树的构造方法:

  1.递归方法:

  

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

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

    #采用递归方法
    def add(self,data,node):
        if not self.root:
            self.root=Node(data)
            return
        if data<node.value:
            if not node.lchild:
                node.lchild=Node(data)
                return node
            else:
                return self.add(data,node.lchild)
        else:
            if not node.rchild:
                node.rchild=Node(data)
                return node
            else:
                return self.add(data,node.rchild)

2.采用队列方法:

#采用队列方法
    def add(self,data):
        if not self.root:
            self.root=Node(data)
            return
        queue=[self.root]
        while 1:
            node=queue.pop()
            if data < node.value:
                if not node.lchild:
                    node.lchild = Node(data)
                    return
                else:
                    queue.append(node.lchild)
            else:
                if not node.rchild:
                    node.rchild = Node(data)
                    return
                else:
                    queue.append(node.rchild)

 

3.前序中序后序遍历方法:

    # 前序遍历,根,左右
    def front_travel(self, node):
        if not node:
            return
        self.data_list.append(node.value)
        if node.lchild:
            self.front_travel(node.lchild)
        if node.rchild:
            self.front_travel(node.rchild)

    # 中序遍历,左根右
    def middle_travel(self, node):
        if not node:
            return
        self.middle_travel(node.lchild)
        self.data_list.append(node.value)
        if node.rchild:
            self.middle_travel(node.rchild)
# 后序遍历,右左根
    def rear_travel(self, node):
        if not node:
            return
        self.rear_travel(node.rchild)
        if node.lchild:
            self.rear_travel(node.lchild)
        self.data_list.append(node.value)

 4.将数据添加到二叉树模型中,备注数据必须有序,无序数据会导致二叉树左右枝干不对称

 #数据data必须为有序,才能添加二叉树
    def add_module(self,data):
        lengtht=len(data)
        if not lengtht:
            return
        mid=lengtht//2
        self.add(data[mid])
        self.add_module(data[:mid])
        self.add_module(data[mid+1:])

 

 



posted @ 2019-09-08 18:19  fjc0000  阅读(151)  评论(0编辑  收藏  举报