繁体   English   中英

在将根打印到二叉树的叶路径时遇到问题

[英]Having trouble printing root to leaf paths for binary tree

我正在尝试为二叉树打印所有根到叶的路径,我需要将结果作为字符串列表返回。 我正在尝试使用递归和StringBuilders来执行此操作,但是使用每个新路径,而不是删除旧路径,而是将其追加到该路径。

如果从根到叶的路径是5-> 3-> 2-> 1、5-> 3-> 4、5-> 7-> 6和5-> 7-> 8(我正在使用的示例),我的结果如下:

5-> 3-> 2-> 1

5-> 3-> 2-> 14

5-> 3-> 2-> 147-> 6

5-> 3-> 2-> 147-> 68

这是因为我使用StringBuilder的方式,但是我无法弄清楚我在做什么错。 以下是我的整个代码。 任何帮助,将不胜感激:

public class solution{
    static List<String> allPaths = new ArrayList<String>();
    public static List<String> binaryTreePaths (BinaryTree bT){
        StringBuilder sb = new StringBuilder();
        binaryTreePathsHelper(bT, sb);
        return allPaths;
    }

    public static void binaryTreePathsHelper(BinaryTree bT, StringBuilder sb){
        if (bT == null){
            return;
        }
        if (bT.getLeftChild() == null && bT.getRightChild() == null){
            sb.append(bT.getRoot() + "");
            allPaths.add(sb.toString());
            sb = new StringBuilder();
        }
        else{
            sb.append(bT.getRoot() + "->");
        }
        if (bT.getLeftChild() != null){
            binaryTreePathsHelper(bT.getLeftChild(), sb);
        }
        if (bT.getRightChild() != null){
            binaryTreePathsHelper(bT.getRightChild(), sb);
        }
    }
}

当树从当前节点有两条路径时,就会发生问题。 您要将StringBuilder的相同实例传递给binaryTreePathsHelper两个实例。 这意味着两条路径都以单个字符串构建器结尾。

最简单的解决方案是不传递StringBuilder 而是传递String 然后,你将创建新String是你附加到每次你传入的String ,消除意外对象重用的可能性。

如果您真的想传递StringBuilder实例,则在递归调用binaryTreePathsHelper时需要复制它们。 例如:

binaryTreePathsHelper(bT.getRightChild(), new StringBuilder(sb.toString());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM