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