文章目录
列表实现
树的结构是root=[r, [], []]
root[0]=根结点,root[1]=左子树,root[2]=右子树
插入操作,会把新的节点当作原来节点的父节点。
def BinaryTree(r):
return [r, [], []]
def insertLeft(root, newBranch):
# root[0]=根结点,root[1]=左子树,root[2]=右子树
t = root.pop(1) # 此时,root=[r,[](右子树的结点)]
print('root ', root)
print('t ', t)
# 插入左子树
if len(t) > 1:
root.insert(1, [newBranch, t, []])
else:
root.insert(1, [newBranch, [], []])
return root
def insertRight(root, newBranch):
# root[0]=根结点,root[1]=左子树,root[2]=右子树
t = root.pop(2) # 此时,root=[r,[](左子树的结点)]
if len(t) > 1:
root.insert(2, [newBranch, [], t])
else:
root.insert(2, [newbranch, [], []])
return root
def getRootVal(root):
return root[0]
def setRootVal(root, newVal):
root[0] = newVal
def getLeftChild(root):
return root[1]
def getRightChild(root):
return root[2]
r = BinaryTree(3)
insertLeft(r,4)
insertLeft(r,5)
insertRight(r,6)
insertRight(r,7)
l = getLeftChild(r)
print(l)
setRootVal(l,9)
print(r)
insertLeft(l,11)
print(r)
print(getRightChild(getRightChild(r)))
[5, [4, [], []], []]
[3, [9, [4, [], []], []], [7, [], [6, [], []]]]
[3, [9, [11, [4, [], []], []], []], [7, [], [6, [], []]]]
[6, [], []]