递归后序树导航

时间:2013-02-28 19:54:38

标签: python

我正在尝试实现以下算法:

  

惠誉的算法(对于单字符序列):

     

步骤1:对于每个叶节点n,创建一个包含叶子的集合Sn   分配信。

     

步骤2:对于具有子u和v的每个内部节点n,创建一个集合   Sn等于:•Su∩Sv如果Su∩Sv不为空。 •如果Su∩Sv是Su Su Sv   空。

     

步骤3:对于具有父p的每个内部节点n,分配n.seq a   字符等于:•p.seq如果p.seq∈Sn•Sn的任何字符   否则(或者如果n是根)。

我得到一个二叉树作为输入。

我已经完成了第一步,现在需要递归地通过二叉树进行后序导航,以便为每个节点分配集合。我想知道如何开始这个?

使用前序递归在树中导航是这样完成的(这只是计算树长度的一个例子,它取决于树中有多少个叶子.srags = no children):

def __len__(self):

     if self.isLeaf():
        print('base case - reached leaf!')
        return 1

    for t,w in self.children:  
        print('not leaf so sent through loop')
        numLeaves += len(t)

    return numLeaves

1 个答案:

答案 0 :(得分:1)

这很简单,只有在没有左右儿童的情况下,才将节点标记为已访问。访问根节点后,算法结束。如果使用递归,则算法更容易。

要获得算法的正确设置,请让您的帖子顺序遍历返回它的分配字符串(如果它是一个叶子,它将是一个单个字符)或一个空白字符(如果没有孩子,无论是右边还是左边)。

在发布顺序功能中,追加返回的字符串,然后返回附加的字符串。

http://en.wikipedia.org/wiki/Tree_traversal#Post-order