这是我自己按照小白专场中写出来的,在Pycharm中调试正确,但是在PTA中,一直显示答案错误。找不到具体原因。
#建树函数中用到的:NewNode函数
class NewNode:
def __init__(self,root):
self.left = None
self.right = None
self.root = root
self.flag = 0
#建树函数中的插入函数
def Insert(Tree, node):
if (Tree is None):
Tree = NewNode(node)
elif(node > Tree.root ):
Tree.right = Insert(Tree.right, node)
else:
Tree.left = Insert(Tree.left, node)
return Tree
#建树函数
def makeTree(FirstLine):
#T即为Tree
T = NewNode(FirstLine[0])
for i in range(1,len(FirstLine)):
T = Insert(T, FirstLine[i])
return T
#进行其它行判断的judge函数
def judge(T, OtherList):
flag = 0
if(T.root != OtherList[0]):
flag = 1
else:
T.flag = 1
for i in range(1, len(OtherList)):
if((flag == 0) and (check(T,OtherList[i]) == 0)):
flag = 1
if (flag):
return 0
else:
return 1
#在judge函数中使用到的check类
def check(T,V):
if (T.flag):
if(V>T.root):
return check(T.right,V)
elif(V<T.root):
return check(T.left, V)
else:
return 0
else:
if(T.root == V):
T.flag = 1
return 1
else:
return 0
#重置函数ResetT
#清除各点的标记
def ResetT(T):
if(T.left):
ResetT(T.left)
if(T.right):
ResetT(T.right)
T.flag = 0
#主函数
def main():
#读取N和L
AllData = list(map(int,input().split()))
N = AllData[0]
L = AllData[1]
number = 0
while(N<=10):
L = AllData[1]
#读取第一行数据
FirstLine = list(map(int,input().split()))
#建树操作
T = makeTree(FirstLine)
OtherLine = []
for i in range(L):
OtherLine.append(list(map(int, input().split())))
#对其他序列进行判别
for i in range(L):
if judge(T, OtherLine[i]):
print("YES")
else:
print("NO")
ResetT(T)
AllData = list(map(int, input().split()))
N = AllData[0]
if N == 0:
break
print("NO")
if __name__ =="__main__":
main()