1.数据结构&算法的引言+时间复杂度
2.python数据结构的性能分析
3.基本数据结构-栈
4.基本数据结构-队列
5.队列的应用案例-烫手的山芋
6.基本数据结构-双端队列(Deque)
7.Deque的应用案例-回文检查
8.基本数据结构-顺序表和链表
9算法之顺序,二分,hash查找
10.排序
11.二叉树
重点中的重点:单链表
重点题目:下列哪些是数据结构:列表,元组,字典,字符串不是
1.链表是一种数据结构:节点和链表(抽象的数据结构)
思考:如何封装节点?2个基本属性写在构造方法中
链表数据结构的封装:-节点(Node):class Node(): def __init__(self,item): self.item=item self.next=None链表(Link):class Link(): def __init__(self): self._head=None

链表:(1)存储第一个节点的属性head
(2)将每个节点串联起来
next用来指向下一个节点

每个节点:包括三个部分,其中包括一个数据块和left和right
目的:对数据进行组织和串联
二叉树基本概念:(1)根节点(2)左叶子节点(3)有叶子节点(4)子树

链表代码:
链表数据结构的封装: -节点(Node): class Node(): def __init__(self,item): self.item=item self.next=None 链表(Link): class Link(): def __init__(self): self._head=None
二叉树代码初步:
class Node(): def __init__(self,item): self.item=item self.left=None self.right=Noneclass Tree(): #构造方法可以构造一个空树 node=Node(item) #判断树为空 if self.root=None: self.root=node return #树为非空的插入操作 #add插入节点数据,并且串联数据

思考上图:插入这个问号?应该先考虑插入的位置,再考虑插入这个数据
(1)查看第一层,以此类推
(2)查看左右叶子节点是否为空
思考:如何将学到的知识应用?也就是编程的思想

我们需要从root,一层一层进行遍历
如何插入呢?可以将节点放在列表中,删除PoP这个1节点
(1)

(2)

二叉树的插入思想(先进先出的队列思想有用到):
1.先将根节点放在列表中,再删除
2.判断左右两个儿子节点是否为空,不为空,就放在列表中,再删除pop
4.依次类推
思路整理:

如何写出这个程序呢?对二叉树的插入
class Node(): def __init__(self,item): self.item=item self.left=None self.right=None class Tree(): def __init(self): self.root=None def add(self,item): #构造方法可以构造一个空树 node=Node(item) #判断树为空 if self.root=None: self.root=node return #树为非空的插入操作,add插入节点数据,并且串联数据 queue=[self.root] while queue: cur=queue.pop(0) if cur.left==None: cur.left=node return else: queue.append(cur.left) if cur.right==None: cur.right=node return else: queue.append(cur.right)
#广度遍历,也就是一行一行的遍历 def travel(self): if self.root is None: print('') return else: queue = [self.root] while queue: cur = queue.pop(0) print(cur.item) if cur.left is not None: queue.append(cur.left) if cur.right is not None: queue.append(cur.right) 知道多少次循环,用for循环,不知道多少次循环,用while循环
条件:列表是否为空
二叉树遍历 广度遍历:层级遍历 深度遍历:前序:根左右 中序:左根右 后序:左右根

前序:1 2 4 8 9 5 10 3 6 7
后序:8 9 4 10 5 2 6 7 3 1
代码实现: