• 二叉树与排序二叉树


    二叉树

    • python实现二叉树的结构:

      • 根节点
      • 左叶子节点
      • 右叶子节点
      • 子树
      • 高度
    • 二叉树的遍历:

      • 广度优先(层次遍历)
      • 深度优先:
        • 前序(根左右):把根放到最前面      
        • 中序(左根右):把根放到中间      
        • 后序(左右根):把根放到最后
      #封装一个节点对象
      class Node(object):
          def __init__(self,item):
              self.item = item
              self.left = None
              self.right = None
      class Tree(object):
          def __init__(self):#构造出一颗空的二叉树
              self.root = None #root指向第一个节点的地址,如果root指向了None,则该二叉树为空
          #向二叉树中插入节点
          def addNode(self,item):
              node = Node(item)
              if self.root == None:
                  #addNode如果第一次被调用则意味着:向空树中插入第一个节点,该节点一定是该树的根节点
                  self.root = node
                  return
              cur = self.root
              queue = [cur]
              while queue:
                  n = queue.pop(0)
                  if n.left != None:
                      queue.append(n.left)
                  else:
                      n.left = node
                      break
                  if n.right != None:
                      queue.append(n.right)
                  else:
                      n.right = node
                      break
          def travel(self):
              """广度遍历"""
              #如果是为空则
              if self.root == None:
                  print('空!')
                  return
              #树为非空
              cur = self.root
              queue = [cur]
              while queue:
                  n = queue.pop(0)
                  print(n.item)
                  if n.left != None:
                      queue.append(n.left)
                  if n.right != None:
                      queue.append(n.right)
                      
          def forward(self,root):
              """前序(根左右)"""
              if root == None: # 递归结束条件
                  return
              print(root.item)
              self.forward(root.left) # 递归,本行代码结束才会执行下一行代码
              self.forward(root.right)
              
          def middle(self, root):
              """中序(左根右)"""
              if not root:
                  return
              self.middle(root.left) # 递归,将root变为左叶子节点的根
              print(root.item, end='')
              self.middle(root.right)
              
          def back(self, root):
              """后序(左右后)"""
              if not root:
                  return
              self.back(root.left)
              self.back(root.right)
              print(root.item)
      

    排序二叉树

    • 插入节点的时候一定要遵从的原则:比根节点小的节点同一插入在树的左侧,比根节点大的节点同一插在数据的右侧

    • 构建排序二叉树

      class Node(object):
          def __init__(self,item):
              self.item = item
              self.left = None
              self.right = None
      class sort(object):
          class SortTree():
          def __init__(self):
              self.root = None
              
          def insertNode(self,item):
              node = Node(item)
              #向空树中插入第一个节点的情况
              if self.root == None:
                  self.root = node
                  return
              #树为非空的情况
              cur = self.root
              while True:
                  if node.item > cur.item:#往右插
                      if cur.right == None:
                          cur.right = node
                          break
      
                      else:
                          cur = cur.right
                  else:#往左插
                      if cur.left == None:
                          cur.left = node
                          break
                      else:
                          cur = cur.left
              
          def middleTravel(self,root): # 只有中序才能将排序二叉树中的节点数据按顺序读出
              if root == None:
                  return
              self.middle(root.left)
              print(root.item)
              self.middle(root.right)
      
      
  • 相关阅读:
    vim对光标所在的数字进行增减
    fedora找开ftpd服务器并以root登陆
    wxwidget自定义消息处理步骤
    c++的检测的确比C++更严格
    php常用字符串操作函数
    如何判断一个数组是一维数组或者是二维数组?用什么函数?
    php 面试 题汇总
    php 数组 常用函数
    php 会话控制
    用tp实现中文验证码
  • 原文地址:https://www.cnblogs.com/bigox/p/11626556.html
Copyright © 2020-2023  润新知