解题思路
维护一个list,存放路径节点值。
root为根节点
level表示深度(‘-’的个数)
举例来说,root开始,如果list的大小和level大小相等,说明一直先序遍历还没有到底。直到level的值大小与前一次相等或者变小,说明进行了
回溯,所以要更新list的值。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| class Solution { public TreeNode recoverFromPreorder(String S) { ArrayList<TreeNode> alst = new ArrayList<TreeNode>(); int pos = 0; int level =0; String value = ""; TreeNode root = new TreeNode(level); int lastlevel = 0; while(pos<S.length()){ level = 0; while(pos<S.length() && S.charAt(pos)=='-'){ level ++; pos++; } int c = pos; while(pos<S.length() && S.charAt(pos)!='-'){ pos++; } TreeNode n = new TreeNode(Integer.valueOf(String.valueOf(S.substring(c,pos)))); if(alst.size()==0){ root = n; alst.add(n); }else{ if(alst.size()==level){ alst.get(level-1).left = n; alst.add(n); }else{ if(lastlevel > level) { alst.get(level-1).right = n; alst.set(level, n); while(alst.size()>level+1) { alst.remove(alst.size()-1); } }else { alst.get(level-1).right = n; alst.set(level, n); } } } lastlevel = level; } return root; } }
|