获取迭代器以使用深度优先遍历二叉树

Getting an iterator for traversing a binary tree using depth first

我想使用 for 循环对二叉树进行深度优先遍历,并在每一步执行计算。

假设你有一棵 4 层的树:

       root
       /  \
      /    \
     /      \
    xx       xx
   /  \     /  \
  /    \   /    \
xx    xx   xx    xx
/ \   / \  / \   / \
x  x x   x x  x  x  x

如果将“深度优先探索树的步骤”放在列表中,它将如下所示:

[
[1],
[1,1], 
[1,1,1],
[1,1,0],
[1,0],
[1,0,1],
[1,0,0],
[0], 
[0,1],
[0,1,0], 
[0,1,1],
[0,0],
[0,0,1]
[0,0,0] 
]

是否有给定二叉树级别的函数 returns 列表中的“树探索步骤”?

我的第一个想法是使用 itertools.permutation 库,但它没有给你正确的顺序。

我也试过使用:

l = [False, True]
list(itertools.product(l, repeat=3))

关闭,但它没有考虑到我在树的层级上下移动。

假设你的二叉树是一个完美二叉树,你可以使用这个函数:

def traverse(height, left=1, right=0):
    path = []
    while True:
        if len(path) < height:
            path.append(left)
        else:
            while path[-1] == right:
                path.pop()
                if not path:
                    return
            path[-1] = right
        yield path

然后对于高度为3的树,如下调用:

for path in traverse(3):
    print(path)