查找所有叶节点是否都在同一高度

时间:2019-01-06 12:33:26

标签: python algorithm graph tree

我在Python中有一个字典形式的邻接表:     {1:[2,3], 2:[4,5,6], 3:[7,8]}    我的findleaf()看起来像这样

def findleaf(d):
     keylist= list(d.keys()) 
     leaf = []
     for i in d:
         valList = d[i]
         for j in valList:
            if j not in keylist:
               leaf.append(j)
     return leaf

因此上述方法将叶子返回为[4,5,6,7,8],但我也想知道它们是否处于同一级别。

首先想到的是找到从起始节点到叶节点的路径,然后找到其长度。 但是我们可以做得更好还是什至可以在上面提到的相同函数中返回叶子及其高度?

1 个答案:

答案 0 :(得分:1)

您可以使用DFS并维护DEEP变量。找到叶子后,将叶子的编号和DEEP添加到容器中。

d = {1:[2,3],2:[4,5,6], 3:[7,8]}
ans = []
deep = 1
keylist = list(d.keys())
def findleaf(n,deep):
    if n not in keylist:
        ans.append([n,deep])
    else:
        l = d[n]
        for i in l:
             findleaf(i,deep+1)
findleaf(1,deep)
print(ans)

输出: [[4,3],[5,3],[6,3],[7,3],[8,3]]