全部评论
static StringBuilder s = new StringBuilder();
static void core(String nodes) {
// 叶子节点
if ("".equals(nodes)) {
return;
}
// 第一个是根节点
char root = nodes.charAt(0);
if (nodes.length() == 1) {
s.append(root);
return;
}
// 2(3,4(,5)) , 6(7,)
// 后面一个肯定是去除 一对()
nodes = nodes.substring(2,nodes.length() - 1);
// 找到左子树的范围
int cur = 1;
int find = -1;
if (nodes.charAt(0) == ',') {
// 提前结束左子树查找
cur = 0;
find = 0;
}else if(nodes.charAt(1) == ',') {
cur = 0;
find = 1;
}
if (find == -1) {
// 找到第一个 (
while (nodes.charAt(cur) != '(') {
cur++;
}
// 记录( - )
int leftSubRight = 1;
do {
cur++;
if (nodes.charAt(cur) == '(') {
leftSubRight++;
}else if(nodes.charAt(cur) == ')') {
leftSubRight--;
}
}while(leftSubRight != 0);
}
// [0-cur]为左子树范围
// 处理左子树
if (find != 0)
core(nodes.substring(0,Math.min(nodes.length(), cur + 1)));
// 根
s.append(root);
// 处理右子树
core(nodes.substring(find == 0 ? 1 : Math.min(nodes.length(), cur + 2),nodes.length()));
}
static String solution(String input) {
core(input);
return s.toString();
} 最后四分钟勉强凑出来
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享