数据结构3.1-树的同构

问题

数据结构3.1-树的同构_第1张图片
数据结构3.1-树的同构_第2张图片
数据结构3.1-树的同构_第3张图片
树的同构

代码

def build(tree, n):
    root = 0
    for i in range(n):
        node = input().split(' ')
        tree.append(node)

        if node[0] == 'A':
            root = i

    return root

def judge(t0, r0, t1, r1):
    r0 = t0[r0]
    r1 = t1[r1]

    if r0[0] != r1[0]:
        return False

    if r0[1] == '-':
        if r0[2] == '-':
            if r0 == r1:
                return True
            else:
                return False
        
        elif r1[1] != '-' and r1[2] == '-':
            return judge(t0, int(r0[2]), t1, int(r1[1]))

        elif r1[2] != '-' and r1[1] == '-':
            return judge(t0, int(r0[2]), t1, int(r1[2]))

        else:
            return False
    
    elif r0[2] == '-':
        if r1[1] != '-' and r1[2] == '-':
            return judge(t0, int(r0[1]), t1, int(r1[1]))
        
        elif r1[2] != '-' and r1[1] == '-':
            return judge(t0, int(r0[1]), t1, int(r1[2]))
        
        else:
            return False
    
    else:
        if r1[1] != '-' and r1[2] != '-':
            a1 = judge(t0, int(r0[1]), t1, int(r1[1]))
            a2 = judge(t0, int(r0[2]), t1, int(r1[1]))
            
            a3 = judge(t0, int(r0[1]), t1, int(r1[2]))
            a4 = judge(t0, int(r0[1]), t1, int(r1[2]))

            return (a1 or a2) and (a3 or a4)
        
        else:
            return False

tree = [ [], [] ]
root = [ 0, 0 ]
for i in range(2):
    n = int(input())
    root[i] = build(tree[i], n)

if judge(tree[0], root[0], tree[1], root[1]):
    print('Yes')
else:
    print('No')

有任何问题请回复提出。然后欢迎关注微信公众号格物致愚

数据结构3.1-树的同构_第4张图片
格物致愚

你可能感兴趣的:(数据结构3.1-树的同构)