04-树4 是否同一棵二叉搜索树(Python)——(2)

这是我自己按照小白专场中写出来的,在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()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值