获取二叉树中所有根到叶的路径,同时识别方向

Obtain all root to leaf paths in binary tree while also identifying directions

我必须获得二叉树中所有的根到叶的路径。现在这通常是一项简单的任务,但现在我还必须识别左右节点。也就是说,当我进入一个节点的左子树时,该节点应该在路径中记录为 !abc,其中 abc 是节点名称。当进入右子树时,节点应按原样记录。所以如果我的树是1(左)2(右)3,那么必须保存的两条路径就是!1->2和1->3。这是我的代码:

def get_tree_path(root, paths, treepath):
    if not root:
        return
    if not root.left and not root.right:
        treepath.append(root.data)
        paths.append(treepath)
        
    if root.left:
        treepath.append('!'+root.data[0])
        get_tree_path(root.left, paths, treepath)

    if root.right:
        treepath.append(root.data[0])
        get_tree_path(root.right, paths, treepath)

这确实获得了路径。但是左右子树路径都是连在一起的。也就是说,对于上面给出的示例,我得到 [!1, 3, 1, 2] 作为输出。我已经尝试了这里给出的许多建议:print all root to leaf paths in a binary tree and 但我只会收到更多错误。请帮忙

问题是当您将 treepath 保存到 path 时,您并没有删除 treepath 的内容。

为此,您需要为每个递归调用创建一个新列表:

if root.left:
    treepath_left = list(treepath)
    treepath_left.append('!'+root.data[0])
    get_tree_path(root.left, paths, treepath_left)

if root.right:
    treepath_right = list(treepath)
    treepath_right.append(root.data[0])
    get_tree_path(root.right, paths, treepath_right)