递归方法后删除尾随空格

我正在运行一个二叉树以按特定顺序打印一个字符串元素,它实际上是要求一个字符串的返回值,我只是在摆脱尾随空格时遇到问题,.trim()将无法工作,因为它使用递归等等,在使用 7 个节点的测试用例中,它将有几个它删除必要的空格,我能想出的最佳解决方案是 if 语句来删除空间的最后一个索引,但是有同样的问题。这更像是一个与递归逻辑相关的问题。

正确答案:“a b d e c f g”

我的代码得到的答案:“a b d ec fg”

public static String travel(TreeNode<String> root) {
        StringBuilder sb = new StringBuilder();
    
        if(root != null) {
            sb.append(root.getData() + " ");
            sb.append(travel(root.getLeft()));
            sb.append(travel(root.getRight()));
        }
        
        if(sb.length() > 2) {
            sb.deleteCharAt(sb.lastIndexOf(" "));
        }
        
        return sb.toString();
    }
icem_net 回答:递归方法后删除尾随空格

这应该有效

public static String travel(TreeNode<String> root) {
    StringBuilder sb = new StringBuilder();

    if(root != null) {
        sb.append(root.getData());
        String left = travel(root.getLeft());
        String right = travel(root.getRight());
        if (left.length() > 0)
            sb.append(" " + left);
        if (right.length() > 0)
            sb.append(" " + right);
    }
    return sb.toString();
}
,

怎么样

public static String travel(TreeNode<String> root) {
    StringBuilder sb = new StringBuilder();

    if(root != null) {
        sb.append(root.getData());
        sb.append(" " + travel(root.getLeft()));
        sb.append(" " + travel(root.getRight()));
    }
    
    return sb.toString().trim();
}
,

看起来你正在写一个 preorder binary tree traversal

将字符串化添加到算法中会使函数负担过重,使其不太有用。我建议返回一个列表,然后调用者可以随意将它加入一个字符串中。如果这是算法挑战的一部分并且您的方法标头已修复,请编写一个辅助方法来执行递归,并让样板方法将返回的数组字符串化。

另一种使代码更通用的方法是返回节点列表而不是它们的数据。同样,这让调用者可以灵活地对结果做他们想做的事情。

顺便说一下,“Traverse”是一个比“travel”更典型的名字。

我将其保留为字符串,但最好将此方法编写为 T 类型的接受节点,并使结果为 ArrayList<TreeNode>

public static String preorderToString(TreeNode<String> root) {
    var result = new ArrayList<String>();
    traversePreorder(root,result);
    return String.join(" ",result);
}

public static void traversePreorder(
    TreeNode<String> root,ArrayList<String> result
) {
    if (root != null) {
        result.add(root.getData());
        traversePreorder(root.getLeft());
        traversePreorder(root.getRight());
    }
}
本文链接:https://www.f2er.com/75674.html

大家都在问