1、首先要知道用到了几个类(使用自顶向下分析思路)
(1)实现二叉树类,命名其为BinaryTree,具体实现如下
首先明确其功能、输入及输出:
1、输入一个int 类型整数
2、输出一个列表,列表中每一个元素都是一个节点对象,每个元素之间包含着逻辑关系
根据类的功能、输入以及输出,实现如下:(写的时候先写run中的逻辑,然后再慢慢填充细节实现)
class BinaryTree():
def __init__(self,number):
self.number = number
def run(self):
# 创建一个含有n个数的列表,且其中每一个元素都是一个Node类型的(Node类型目前还未创建)
binaryTreeList = [Node(i + 1) for i in range(self.number)]
# 按照二叉树的逻辑结构将列表中的各个点连接起来
for _ in binaryTreeList:
if 2 * _.name <= self.number:
_.left = binaryTreeList[2 * _.name - 1] # 这里需要注意-1,因为列表的起始是从0开始的
if 2 * _.name + 1 <= self.number:
_right = binaryTreeList[2 * _.name + 1 - 1] # 这里的-1的理由同上
# 返回这个列表
return binaryTreeList
(2)每个元素节点都是一个 Node 类,具体实现如下
Node类的功能、输入、输出分析
1、输入节点名称
2、节点包含自己的值(data)
3、含有左右子节点属性
class Node():
def __init__(self, name):
self.name = name
self.data = None
self.left = None
self.right = None
2、二叉树完整代码如下:
class Node():
def __init__(self, name):
self.name = name
self.data = None
self.left = None
self.right = None
class BinaryTree():
def __init__(self,number):
self.number = number
def run(self):
# 创建一个含有n个数的列表,且其中每一个元素都是一个Node类型的(Node类型目前还未创建)
binaryTreeList = [Node(i + 1) for i in range(self.number)]
# 按照二叉树的逻辑结构将列表中的各个点连接起来
for _ in binaryTreeList:
if 2 * _.name <= self.number:
_.left = binaryTreeList[2 * _.name - 1] # 这里需要注意-1,因为列表的起始是从0开始的
if 2 * _.name + 1 <= self.number:
_right = binaryTreeList[2 * _.name + 1 - 1] # 这里的-1理由同上
# 返回这个列表
return binaryTreeList
3、测试
首先我们假定一个逻辑结构如下的二叉树(圆圈右下角的角标代表节点的名称,圆圈中的数字代表节点的值):
测试代码:
if __name__ == '__main__':
number = int(input("please input the length of the tree:"))
binaryTree = BinaryTree(number).run()
dataList = [4, 3, 5, 2, 1]
# 给每一个节点赋值
for _ in range(number):
binaryTree[_].data = dataList[_]
print(binaryTree)
print(binaryTree[0].data,'\n',binaryTree[0].left,'\n',binaryTree[0].left.data)
输入与输出结果:
[<__main__.Node object at 0x0000018A0ABA10B8>, <__main__.Node object at 0x0000018A0ABA1128>, <__main__.Node object at 0x0000018A0ABA1A20>, <__main__.Node object at 0x0000018A0ABA1748>, <__main__.Node object at 0x0000018A0ABA1A58>]
4
<__main__.Node object at 0x0000018A0ABA1128>
3
检查无误,通过
至此,我们已经实现了Python建立二叉树~
3、整题完整代码以及草稿本上的思路如下:
代码:
class Node():
def __init__(self, name):
self.name = name
self.data = None
self.left = None
self.right = None
class BinaryTree():
def __init__(self, number):
self.number = number
def run(self):
# 创建一个含有n个数的列表,且其中每一个元素都是一个Node类型的(Node类型目前还未创建)
binaryTreeList = [Node(i + 1) for i in range(self.number)]
# 按照二叉树的逻辑结构将列表中的各个点连接起来
for _ in binaryTreeList:
if 2 * _.name <= self.number:
_.left = binaryTreeList[2 * _.name - 1] # 这里需要注意-1,因为列表的起始是从0开始的
if 2 * _.name + 1 <= self.number:
_right = binaryTreeList[2 * _.name + 1 - 1] # 这里的-1理由同上
# 返回这个列表
return binaryTreeList
if __name__ == '__main__':
number = int(input("please input the length of the tree:"))
binaryTree = BinaryTree(number).run()
dataList = [4, 3, 5, 2, 1]
# 给每一个节点赋值
for _ in range(number):
binaryTree[_].data = dataList[_]
print(binaryTree)
print(binaryTree[0].data,'\n',binaryTree[0].left,'\n',binaryTree[0].left.data)
草稿思路:
感谢观看!