Tree 树结构( 二 )


root.children.append(child2)
child1.parents.append(root)
child2.parents.append(root)
#Jane 和 Mike 的子女
grandchild1 = FamilyMember("Jay", "Male", 2)
grandchild2 = FamilyMember("Joy", "Female", 2)
...
child1.children.append(grandchild1)
child1.children.append(grandchild2)
grandchild1.parents.append(child1)
...

输出:
#递归
def print_family(member):
print(f"{member.name} - {member.gender} - Generation {member.generation}")
for child in member.children:
print(" |--", end="")
print_family(child)
print_family(root)

2.如何打印输出直观效果的家族树?
我们定义了一个()函数,它能递归地打印指定家庭成员以及其子节点 。
通过在每个节点前增加 "| "符号,就能形成一个漂亮的树形结构 。关键点是:
递归调用(),打印每个子节点;
在子节点前增加 "|" 和"--"符号,形成一个缩进结构;
打印每个节点的时候,打印其名称、性别和代数信息;
执行(root),就可以打印出整个家族结构 。可以看到,使用递归,就可以很简单地打印出一个复杂的树形结构 。你可能还想添加更多功能,比如:
这些都可以基于上述基本功能来实现 。通过分解为类、方法和函数,编码家族结构会更加模块化和可扩展 。
John - Male - Generation 0
|--Jane - Female - Generation 1
|--Jay - Male - Generation 2
|--Joy - Female - Generation 2
|--Mike - Male - Generation 1

当我们想了解某个家族成员处于族谱中的第几代,如何构造算法?
def count_gen(Familytree, person):
prev = set()
for r in Familytree:
while r not in prev:
prev.add(r)
r = tree[r]
return len(skils)

致所有受到时间约束的工程师的任务清单
对于那些正在找工作的时间有限的工程师,这里有一份列出各类型问题中最好的题目的列表,它可以教你每个类别/类型问题的核心概念和技巧!
许多其他题目都是这些个别题目技巧的混合 。在我上一个求职过程中,我使用这个列表只做重要的题目 。
如下:

?Arrays - Two Sum
?Strings - Longest Substring Without Repeating Characters
?Linked Lists - Reverse a Linked List
?Stacks - Validate Stack Sequences
?Queues - Implement Queue using Stacks
?Trees - Binary Tree Inorder Traversal
?Binary Search - Search Insert Position
?Sorting - Merge Sort
?Hash Tables - Two Sum
?Dynamic Programming - Climbing Stairs
?Greedy Algorithms - Maximum Units on a Truck
?Depth First Search - Number of Islands