从列表列表构建树

时间:2016-10-02 11:18:15

标签: algorithm tree

我的列表列表如下:{{f,h,i},{b,e,f,g},{a,b,c,d}}

我需要使用规则构建一棵树:

  • 对于每个列表,第一个元素是根。
  • 其余的元素是孩子们。

对于这个例子,树看起来:

             a
      b      c     d
   e  f   g
     h  i
你可以帮我写这个算法。

感谢!

1 个答案:

答案 0 :(得分:1)

这是一个简单的递归过程。

  1. 如果列表包含列表,首先递归处理该列表,然后将其替换为第一个元素(其根)。

  2. 现在该列表仅包含字母(表示节点)。

    一个。将第一个字母设为节点。

    湾对小于第一个字母的其他元素进行排序。将它们链接成一个向右下方的分支,并使最大的一个成为第一个字母的左子。

    ℃。同样,对大于第一个字母的其他元素进行排序。将它们链接成一个向右下方的分支,并使最小的一个成为第一个字母的左子。

  3. 在伪代码中:

    def make_into_tree(l):
        for e in l:
            if type(e) == list:
                e = make_into_tree(e)
    
        root = e[0]
    
        smaller = sorted(all letters smaller than e[0])
        for each s in smaller (except for first):
            make s a right child of its predecessor
        smaller_root = smaller[0]
        make smaller_root left child of root
    
        larger = sorted(all letter larger than e[0])
        for each l in larger (except for first):
            make l a right child of its predecessor
        larger_root = smaller[0]
        make larger_root right child of root
    
        return root