在慕课上学习《数据结构–浙江大学》,第三周课后题:用于求解树的叶子。
使用python3编程如下:
from collections import deque
class Node:
def __init__(self,ele):
self.left = None
self.right = None
self.element = ele
class Tree:
def __init__(self):
self.root = None
def buildTree(self,N, llist, rlist):
#定义树
TreeList = []
#定义节点
for i in range(N):
TreeList.append(Node(i))
#对左儿子和右儿子进行判断
for i in range(N):
if llist[i] == '-':
TreeList[i].left = None
else:
l = int(llist[i])
TreeList[i].left = TreeList[l]
#右儿子
if rlist[i] == '-':
TreeList[i].right = None
else:
r = int(rlist[i])
TreeList[i].right = TreeList[r]
#对根结点进行判断
List = llist + rlist
for i in range(N):
if str(i) not in List:
self.root = TreeList[i]
@staticmethod
def getResultList(node):
ResultList = []
queue = deque([node])
try:
while queue:
result = queue.popleft()
if result.left is None and result.right is None:
ResultList.append(result.element)
else:
if result.left:
queue.append(result.left)
if result.right:
queue.append(result.right)
finally:
return ResultList
def main():
llist = []
rlist = []
N = int(input())
for i in range(N):
Olist =input().split()
llist.append(Olist[0])
rlist.append(Olist[1])
tree1 = Tree()
tree1.buildTree(N, llist, rlist)
Result = tree1.getResultList(tree1.root)
s = ""
for i in Result:
print(int(i),end=" ")
if __name__=="__main__":
main()
通过这道练习题,我主要学会了:如何表示结点左儿子右儿子(使用class Node)、如何构建一个二叉树、如何对二叉树进行层序遍历。