gpt4 book ai didi

java - 按预定顺序为子树打印 ( )

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:29:31 24 4
gpt4 key购买 nike

我需要为预订的子树打印 ( 和 ):

       A
/ \
B G
/ \
C P
\
E

我尝试过:

public StringBuilder preOrder(StringBuilder string) {
string.append(value);
if (left!=null || right!=null)
string.append("(");
if (left != null){
left.preOrder(string);
}
if (left!=null && right!=null)
string.append(")");
if (right != null){
right.preOrder(string);
}
return string;
}

然而,结果出来了:

A(B(C(E)P)G

代替:

(A(B(C(E)P)G))

怎么了?

已编辑:

必须是

(A(B(C(E())P())G()))

最佳答案

我觉得这两行很可疑:

if (left!=null && right!=null)
string.append(")");
if (right != null){
right.preOrder(string);
}

您要插入右括号然后 处理右 child 。右 child 后面的右括号在哪里?

我想这会起作用:

if (right != null){
right.preOrder(string);
}
if (left != null || right != null)
string.append(")");

然后你还需要(单独)考虑周围的括号(上面应该给你 A(B(C(E)P)G),你需要添加周围的 () 在调用函数中)。

回应您的编辑:

既然不管有没有 child 都要加上括号,
在这两种情况下,只需删除 if (left != null || right != null):

public StringBuilder preOrder(StringBuilder string) {
string.append(value);
string.append("(");
if (left != null){
left.preOrder(string);
}
if (right != null){
right.preOrder(string);
}
string.append(")");
return string;
}

关于java - 按预定顺序为子树打印 ( ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19346719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com