贴一个第一题的解法吧:
思路:求最近祖先,然后层次遍历,求路径长。
下面是求路径,节点的话,再+1就行

class Node:
    def __init__(self,val):
        self.val = val
        self.left = None
        self.right = None

def countPath(node, a:int, b:int):
    res = 0
    stack = [node]
    while len(stack) > 0:
        tmp = []
        while len(stack) > 0:
            t = stack.pop()
            if t == None:
                continue
            if t.val == a or t.val == b:
                return res
            tmp.append(t.left)
            tmp.append(t.right)
        stack = tmp
        res += 1
    return -float("inf")


def nodeDistances(root:None,a:int,b:int):
    if root == None:
        return None
    if root.val == a or root.val == b:
        return root
    x = nodeDistances(root.left, a, b)
    y = nodeDistances(root.right, a, b)
    if x == None:
        return y
    elif y == None:
        return x
    else:
        return root

if __name__ == "__main__":
    root = nodeDistances(node, a, b)
    if root.val == a or root.val == b:
        print(max(countPath(root.left,a,b), countPath(root.right,a,b)) + 1)
    else:
        print(countPath(root.left,a,b) + countPath(root.right,a,b) + 2)