Python实现单链表:创建、遍历、反转
#coding=utf-8
class Node:
"""
链表节点
"""
def __init__(self,val):
self.val = val
self.next = None
def createList(nums):
if not nums: #链表为空
return False
elif len(nums)==1:
return Node(nums[0])
else:
head = Node(nums[0])
p = head
for i in range(1,len(nums)):
p.next = Node(nums[i])
p = p.next
return head
def printList(head):
p = head
while p:
print(p.val,end=' ')
p = p.next
def reverseList(head):
if not head or not head.next:
return head
else:
p,q = head.next,head
q.next = None
while p:
tmp = p.next
p.next = q
q = p
p = tmp
head = q
printList(head)
if __name__=="__main__":
nums = [1,2,3,4,5]
head = createList(nums)
print('原始链表:')
printList(head)
print()
print('反转后链表:')
reverseList(head)
print()
Python实现二叉树:(按层次遍历顺序)创建、先序遍历、树的翻转(镜像树)
#coding=utf-8
class Node():
"""
节点
"""
def __init__(self,val):
self.val = val
self.left = None
self.right = None
class BTree():
"""
树
"""
def __init__(self):
self.root = None
def addNode(self,val):
node = Node(val)
queue = [self.root] #利用层次遍历的顺序生成树,queue存储根节点
if not self.root:
self.root = node
return
while queue:
cur_node = queue.pop(0)
if not cur_node.left: #空
cur_node.left = node
return
else: #非空
queue.append(cur_node.left)
if not cur_node.right: #空
cur_node.right = node
return
else: #非空
queue.append(cur_node.right)
def dfs(root):
if not root:
return
else:
print(root.val,end=' ')
dfs(root.left)
dfs(root.right)
def reverseTree(root):
if not root:
return root
else:
root.left = reverseTree(root.left)
root.right = reverseTree(root.right)
root.left,root.right = root.right,root.left
return root
def main():
tree = BTree()
nums = [1,2,3,4,5,6]
for num in nums:
tree.addNode(num)
print('先序遍历:')
dfs(tree.root) #tree.root作为遍历的起点而不是tree(类型不同)
print()
reverseTree(tree.root)
print('树翻转:')
dfs(tree.root)
print()
if __name__=="__main__":
main()