數據結構-Python建立列表,棧,鏈表,樹

1.Python建立樹:

class Node(object):
    '''節點類'''

    def __init__(self, elem=-1, lchild=None, rchild=None):
        self.elem = elem
        self.lchild = lchild
        self.rchild = rchild


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

    def add(self, item):
        '''添加元素'''
        node = Node(item)
        if self.root is None:
            self.root = node
        else:
            q = [self.root]

            while q:
                pop_node = q.pop(0)
                if pop_node.lchild is None:
                    pop_node.lchild = node
                    return
                elif pop_node.rchild is None:
                    pop_node.rchild = node
                    return
                else:
                    q.append(pop_node.lchild)
                    q.append(pop_node.rchild)
    def breadth_travel(self):
        '''廣度遍歷'''
        if self.root is None:
            return
        queue = [self.root]
        result = []
        while queue:
            cur_node = queue.pop(0)

            result.append(cur_node.elem)
            if cur_node.lchild is not None:
                queue.append(cur_node.lchild)
            if cur_node.rchild is not None:
                queue.append(cur_node.rchild)
        return result
    def preorder(self,node):
        '''先序遍歷'''
        if node is None:
            return []
        first = [node.elem]
        second = self.preorder(node.lchild)
        third = self.preorder(node.rchild)
        return first + second + third

# print(某某,end=' ')取消換行符

t = Tree()

for i in range(10):
    t.add(i)
print('層序遍歷:',t.breadth_travel())
print('先序遍歷:',t.preorder(t.root))
# print('中序遍歷:',t.inorder(t.root))
# print('後序遍歷:',t.postorder(t.root))

2.Python建立棧

class Stack(object):
    '''棧'''
    def __init__(self):
        self.__list = []

    def push(self,item):
        '''添加一個元素item到棧'''
        self.__list.append(item)

    def pop(self):
        '''彈出棧頂元素'''
        return  self.__list.pop()

    def peek(self):
        '''返回棧頂元素'''
        if self.__list:
            return self.__list[-1]
        else:
            return None

    def is_empty(self):
        '''判斷是否爲空'''
        return self.__list == []
        # return not self.__list

    def size(self):
        '''返回棧的元素個數'''
        return len(self.__list)

if __name__ == '__main__':
    s = Stack()

3.Python建立鏈表

class Node(object):
    '''節點'''
    def __init__(self,elem):
        self.elem = elem
        self.next = None

class SingleLinkList(object):
    '''單鏈表'''
    def is_empty(self):
        '''鏈表是否爲空'''
        pass
    def length(self):
        '''鏈表長度'''
        pass
    def travel(self,item):
        pass
    def add(self,item):
        '''鏈表頭部添加元素'''
        pass
    def insert(self):
        '''插入元素'''
        pass
    

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章