数据结构与算法目录

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用来指向下一个节点

 

 2.二叉树是一种特殊的链表(比列表多了指向和引用):

每个节点:包括三个部分,其中包括一个数据块和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=None
class Tree():
  #构造方法可以构造一个空树
  node=Node(item)
  #判断树为空
  if self.root=None:
    self.root=node
    return
  #树为非空的插入操作

  #add插入节点数据,并且串联数据

 

思考上图:插入这个问号?应该先考虑插入的位置,再考虑插入这个数据

(1)查看第一层,以此类推

(2)查看左右叶子节点是否为空

思考:如何将学到的知识应用?也就是编程的思想

 

我们需要从root,一层一层进行遍历

如何插入呢?可以将节点放在列表中,删除PoP这个1节点

(1)

(2)

 

二叉树的插入思想(先进先出的队列思想有用到):

1.先将根节点放在列表中,再删除

2.判断左右两个儿子节点是否为空,不为空,就放在列表中,再删除pop

3.判断孙子节点是否为空,不为空,则再将孙子节点放在列表中,再删除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循环

条件:列表是否为空

 travel是一层一层遍历打印

 

二叉树遍历
  广度遍历:层级遍历
  深度遍历:前序:根左右
       中序:左根右
       后序:左右根

 

前序:1 2 4 8 9 5 10 3 6 7

中序:8 4 9 2 10 5 1 6 3 7  

后序:8 9 4 10 5 2 6 7 3 1

代码实现:

 

posted @ 2019-06-15 10:36  studybrother  阅读(1463)  评论(0编辑  收藏  举报