2D Arrays(二维数组)
考纲要求
- 10.2 Arrays:2D 数组声明和使用
- 用 2D 数组存储二叉树节点(ArrayNodes[row, 0] = LeftPointer, [row, 1] = Data, [row, 2] = RightPointer)
核心代码模板
声明 2D 数组
ArrayNodes = [[0, 0, 0] for _ in range(20)]
RootPointer = -1
FreeNode = 0
存储 Job 数据(2D 数组)
Jobs = [[0, 0] for _ in range(100)]
NumberOfJobs = 0
def AddJob(jobNum, priority):
global Jobs, NumberOfJobs
if NumberOfJobs < 100:
Jobs[NumberOfJobs][0] = jobNum
Jobs[NumberOfJobs][1] = priority
NumberOfJobs = NumberOfJobs + 1
print("Added")
else:
print("Not added")
2D 数组按列排序(插入排序)
def InsertionSort():
global Jobs, NumberOfJobs
for i in range(1, NumberOfJobs):
key0 = Jobs[i][0]
key1 = Jobs[i][1]
j = i - 1
while j >= 0 and Jobs[j][1] > key1:
Jobs[j + 1][0] = Jobs[j][0]
Jobs[j + 1][1] = Jobs[j][1]
j = j - 1
Jobs[j + 1][0] = key0
Jobs[j + 1][1] = key1
二叉树用 2D 数组实现
# ArrayNodes[row][0] = LeftPointer
# ArrayNodes[row][1] = Data
# ArrayNodes[row][2] = RightPointer
# RootPointer = -1 (null)
# FreeNode = 0
def AddNode():
global ArrayNodes, RootPointer, FreeNode
data = int(input("Enter the data: "))
if FreeNode <= 19:
ArrayNodes[FreeNode][0] = -1
ArrayNodes[FreeNode][1] = data
ArrayNodes[FreeNode][2] = -1
if RootPointer == -1:
RootPointer = 0
else:
placed = False
currentNode = RootPointer
while placed == False:
if data < ArrayNodes[currentNode][1]:
if ArrayNodes[currentNode][0] == -1:
ArrayNodes[currentNode][0] = FreeNode
placed = True
else:
currentNode = ArrayNodes[currentNode][0]
else:
if ArrayNodes[currentNode][2] == -1:
ArrayNodes[currentNode][2] = FreeNode
placed = True
else:
currentNode = ArrayNodes[currentNode][2]
FreeNode = FreeNode + 1
else:
print("Tree is full")
def PrintAll():
global ArrayNodes, FreeNode
for i in range(0, FreeNode):
print(ArrayNodes[i][0], ArrayNodes[i][1], ArrayNodes[i][2])
中序递归遍历(2D 数组版)
def InOrder(nodeIndex):
global ArrayNodes
if nodeIndex == -1:
return
InOrder(ArrayNodes[nodeIndex][0])
print(ArrayNodes[nodeIndex][1])
InOrder(ArrayNodes[nodeIndex][2])
常见错误
- 2D 数组索引顺序混淆
arr[row][col]vsarr[col][row] - 二叉树插入时比较方向搞反
- 忘记更新 FreeNode
- 中序遍历没有 base case