四、从先序遍历还原二叉树(Weekly Contest 132)
别人写的代码
import javafx.util.Pair;
class Solution {
public TreeNode recoverFromPreorder(String S) {
char[] chars = S.toCharArray();
if (chars.length == 0) {
return null;
}
int deep = 0;
boolean flag = false; // 上一个是不是数字
List<Pair<Integer, Integer>> nodePair = new ArrayList<>();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '-') {
if (flag) {
int val = Integer.parseInt(sb.toString());
sb.delete(0, sb.length());
nodePair.add(new Pair<>(deep, val));
deep = 1;
} else {
deep++;
}
flag = false;
} else {
sb.append(chars[i]);
flag = true;
}
}
int val = Integer.parseInt(sb.toString());
nodePair.add(new Pair<>(deep, val));
return go(nodePair, 1);
}
public TreeNode go(List<Pair<Integer, Integer>> subPair, int deep) {
if (subPair.size() == 0) {
return null;
}
TreeNode root = new TreeNode(subPair.get(0).getValue());
if (subPair.size() == 1) {
return root;
}
List<Pair<Integer, Integer>> Pair1 = new ArrayList<>();
List<Pair<Integer, Integer>> Pair2 = new ArrayList<>();
Pair1.add(subPair.get(1));
int i = 2;
for (; i < subPair.size(); i++) {
if (subPair.get(i).getKey() != deep) {
Pair1.add(subPair.get(i));
} else {
break;
}
}
for (; i < subPair.size(); i++) {
Pair2.add(subPair.get(i));
}
root.left = go(Pair1, deep + 1);
root.right = go(Pair2, deep + 1);
return root;
}
}
关于Java中的pair
Java中的pair