python-3.x - 如何使用 Python 将二叉树转换为 Newick 树?
问题描述
我创建了一个具有以下结构的 Tree 对象:
class Tree:
def __init__(self, data=None):
self.data = data
self.left_child = None
self.right_child = None
该对象的一个实例是:
tree = Tree("A")
tree.left_child = Tree("B")
tree.right_child = Tree("C")
tree.left_child.left_child = Tree("D")
tree.left_child.right_child = Tree("E")
tree.right_child.left_child = Tree("F")
tree.right_child.right_child = Tree("G")
它的Newick 格式应该是((G,F)C,(E,D)B)A;
如何将 Tree 对象的任何实例转换为其 Newick 格式?
解决方案
感谢 Blckknght 的提示。
def to_newick(tree):
newick = ""
newick = traverse(tree, newick)
newick = f"{newick};"
return newick
def traverse(tree, newick):
if tree.left_child and not tree.right_child:
newick = f"(,{traverse(tree.left_child, newick)}){tree.data}"
elif not tree.left_child and tree.right_child:
newick = f"({traverse(tree.right_child, newick)},){tree.data}"
elif tree.left_child and tree.right_child:
newick = f"({traverse(tree.right_child, newick)},{traverse(tree.left_child, newick)}){tree.data}"
elif not tree.left_child and not tree.right_child:
newick = f"{tree.data}"
else:
pass
return newick
推荐阅读
- java - 单击片段内回收视图中的按钮时显示自定义对话框片段
- gmail - 防病毒软件正在阻止 nodemailer - 错误:证书链中的自签名证书
- arduino - 我真的搞砸了!我需要撤消一些笨拙的脚本
- apache-spark - Spark,如何打印查询?
- python - 无法弄清楚如何让 BS4 检索 /videos 页面上的 youtube 观看次数
- python - groupby pandas python的自定义排序功能
- javascript - 为什么我输入大写方法后空格键不起作用?
- sql-server - 如何创建索引以加快数据检索
- apache-spark - spark sql 无法识别 hive 分区列
- c++ - 虚拟继承中相同的最派生类=父类之间的相同偏移量?