zoukankan      html  css  js  c++  java
  • 复习 二叉树的创建

     1 '''
     2 树:
     3     每一个结点都有零个或多个子结点
     4     没有父节点的节点称为根节点
     5     每一个非根结点有且只有一个父结点
     6     除了根结点外,每一个子节点可以分为多个不相交的子树
     7 二叉树性质:
     8     在二叉树的第 i 层 最多有 2^(i-1) 个结点
     9     深度为 k 的二叉树最多有 2^k - 1 个结点
    10     叶子结点数为 N0  度数为 2 的结点数为 N2
    11         N0 = N2 + 1
    12     具有 n 个结点的完全二叉树的深度为 log2(n+1)
    13     完全二叉树:
    14         编号为 i 的结点
    15             左孩子 -> 2i
    16             右孩子 -> 2i + 1
    17         左孩子 的 父结点 编号必为 i/2
    18 
    19 '''
    20 class Node(object):
    21     '''定义一个结点,有左孩子和右孩子'''
    22     def __init__(self,data):
    23         # 结点数据
    24         self.data = data
    25         # 左、右 孩子指向为空
    26         self.lchild = None
    27         self.rchild = None
    28 
    29 class BinaryTree(object):
    30     '''定义二叉树'''
    31     def __init__(self):
    32         # 根结点默认为空
    33         self.root = None
    34 
    35     def add(self,data):
    36         # 添加数据到二叉树中 向最后进行添加数据
    37         # 处理顺序:父结点 左孩子 右孩子
    38         node = Node(data)
    39         # 如果为空树
    40         if self.root is None:
    41             self.root = node
    42             # 空树,加入数据则放在根节点处
    43             return
    44         queue = [self.root]
    45         # 添加根节点,作为存在该结点的标志
    46         while queue:
    47             # 如果 queue 不为空
    48             cur_node = queue.pop(0)
    49             # 当前结点指向根节点,取第一个元素
    50             if cur_node.lchild is None :
    51                 # 如果左结点为空
    52                 cur_node.lchild = node
    53                 return
    54             else:
    55                 # 添加到指针内,证明存在左结点
    56                 queue.append(cur_node.lchild)
    57             if cur_node.rchild is None:
    58                 # 如果右结点为空
    59                 cur_node.rchild = node
    60                 return
    61             else:
    62                 # 添加到指针内,证明存在右结点
    63                 queue.append(cur_node.rchild)

    2020-04-17

  • 相关阅读:
    数据库基本概念
    Python语言特性之5:自省
    Python语言特性之4:类变量和实例变量
    Python语言特性之3:@staticmethod和@classmethod
    Python语言特性之2:元类
    Python语言特性之1:函数参数传递
    基础数学与算法学习
    推荐系统资料
    MySQL相关
    Python科学计算包模块的安装(ubuntu)
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12723432.html
Copyright © 2011-2022 走看看