这应该有效
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