算法:使用Python将list转换为树

2019-12-19  本文已影响0人  马克约瑟

输入如下特征的列表,基本类型的值都是正整数,列表项都是树的路径,现在需要将该列表项转换为树,转换时应设置树的根,根的值为0

列表为:
[[1,2,3,4],
[1,2,3,5],
[1,2,6],
[7]]

树的格式为:
        0
       / \
      1   7
     / \
    2   6
   /
  3
 / \
4   5

Python代码如下:

class Tree:
    def __init__(self, value, parent=None):
        if isinstance(value, list):
            self.value = 0
            self.parent = None
            self.children = []
            # 获取列表里每个路径
            for path in value:
                # 构建父结点和孩子结点
                parent = self
                for i,v in enumerate(path):
                    node = None
                    for child in parent.children:
                        if v == child.getValue():
                            node = child
                            break
                    if node == None:
                        node = Tree(v, parent)
                        parent.children.append(node)
                    parent = node
        else:
            # 该逻辑一般只由此构造器执行,而不由外部创建对象时直接执行
            self.value = value
            self.parent = parent
            self.children = []
    
    def getValue(self):
        """获取结点值"""
        return self.value
    
    def getChildren(self):
        """获取孩子结点"""
        return self.children

    def getParent(self):
        """获取父结点"""
        return self.parent
上一篇 下一篇

猜你喜欢

热点阅读