Python自定义treeNode类递归实现整树转嵌套字典的方法如何编写
树结构转嵌套字典实现方案
方法实现逻辑
你的需求对应的结构规则为:非叶子节点作为字典的唯一键,对应值为子节点内容组成的列表;叶子节点直接返回自身data值嵌入列表。以下是修改后的get_all_tree方法,无需额外传入根节点,直接在根节点实例上调用即可:
def get_all_tree(self): # 叶子节点直接返回data值 if self.is_leaf: return self.data # 非叶子节点构建对应字典结构 child_struct = [] for child in self.children: child_struct.append(child.get_all_tree()) return {self.data: child_struct}
测试验证
你可以用如下代码构造示例中的树结构,验证输出是否符合预期:
# 构造示例树 root = treeNode(0) node1 = treeNode(1) node2 = treeNode(2) root.add_child(node1) root.add_child(node2) # 节点2的子节点 for num in [11,12,13,16]: node2.add_child(treeNode(num)) node3 = treeNode(3) node4 = treeNode(4) node2.add_child(node3) node2.add_child(node4) # 节点3的子节点 node3.add_child(treeNode(14)) node3.add_child(treeNode(15)) # 节点4的子节点 for num in [41,42,43]: node4.add_child(treeNode(num)) # 输出结果 print(root.get_all_tree())
运行后输出结果和你给出的示例完全一致:{0: [1, {2: [11, 12, 13, 16, {3: [14, 15]}, {4: [41, 42, 43]}]}]}
注意事项
原代码中的get_children方法在节点为叶子时仅打印提示无返回值,因此实现时直接读取实例的children属性避免异常,如果需要保留调用get_children的写法,可以修改该方法叶子节点时返回空列表即可。
内容的提问来源于stack exchange,提问作者rickiestRick
相关产品推荐
相关产品推荐

