algorithm - 打印所有具有相对位置的根到叶路径

标签 algorithm recursion tree binary-tree

给定一棵二叉树,我们如何打印根到叶路径,但添加“_”来指示相对位置?

例子:

Input : Root of below tree
         A 
       /   \  
      B      C 
     / \    / \
    D   E   F  G

Output : All root to leaf paths
_ _ A
_ B
D

_ A
B
_ E

 A
 _ C
 F

A
_ C
_ _ G

最佳答案

您可以使用预订旅行来参观这棵树。用缩进记录路径。

访问左 child 时减少缩进,访问右 child 时增加缩进。然后你就可以得到这样的路径,

(0, A), (-1, B), (-2, D)
(0, A), (-1, B), (0, E)
...

在输出阶段,对路径进行归一化,找到路径节点的最小缩进并将路径节点移动到,

(2, A), (1, B), (0, D)
(1, A), (0, B), (1, E)
...

然后相应地打印路径。

这是python中的示例代码,

def travel(node, indent, path):
    if not node:
        print_path(path)
        return
    path.append((indent, node))
    if node.left:
        travel(node.left, indent - 1, path)
    if node.right:
        travel(node.right, indent + 1, path)
    del path[-1]


def print_path(path):
    min_indent = abs(min([x[0] for x in path]))
    for indent, node in path:
        p = []
        for x in xrange(min_indent + indent):
            p.append('_')
        p.append(node.val)
        print ' '.join(p)

关于algorithm - 打印所有具有相对位置的根到叶路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43012558/

相关文章:

pointers - 如何创建新结构并将其原始值用作新结构的成员

javascript - 如何从叶节点的一组路径片段构建树

c++ - 为通用树定义迭代器

javascript - 算法 - 根据图像高度和宽度确定图像尺寸的最佳方法?

algorithm - 如果点扩散函数被低估,图像去模糊应用程序会发生什么?

algorithm - 最短路径树声明(图)

algorithm - 递归伸展树(Splay Tree)

javascript - 递归总是能提高性能吗?

java - 如何将 B-Tree 转换为 B* 树?/最小填充逻辑

python - 如何用匹配的键递归替换字典值?