classSolution{ public TreeNode recoverFromPreorder(String S){ int start = 0; //查找数字 for (; start < S.length(); start++) { if (S.charAt(start) == '-') { break; } } String ss = S.substring(0,start); //System.out.println(ss); TreeNode root = new TreeNode(Integer.valueOf(ss)); //index每次位置是数字的位置,1-2--3,这一步让index在0位置 index = start - 1; root.left = fun(S,0); root.right = fun(S,0); return root; } privateint index = 0;//index记录坐标 public TreeNode fun(String s,int depth){ int c = getNextDepth(s,index); if (c <= depth || index > s.length() - 1) returnnull; //更新depth,在数字位置上面,而不是'-'。对于1-2--3,index这时应该在2位置 index += (c +1); //查找数字 int a = index; for (; a < s.length(); a++) { if (s.charAt(a) == '-') { break; } } String ns = s.substring(index,a); //System.out.println("ns = "+ns+" index = "+index+" a = "+a); int num = Integer.valueOf(ns); TreeNode now = new TreeNode(num); index = a - 1; now.left = fun(s,c); now.right = fun(s,c); return now; } publicintgetNextDepth(String s,int ind){ int c = 0; for (int i = ind + 1; i < s.length(); i++) { if (s.charAt(i) == '-') { c++; } else { break; } } return c; } }