2012-05-29 3 views
0

У меня есть вопрос, который я хочу создать после заказа от заказа и заказа, но я не использую восстановление дерева, я хочу только рекурсивно сделать это. Я кодирую это, и в этот момент у меня есть часть правой стороны дерева в preorder (первый символ в preorder является root, я нахожу это в inorder, и у меня есть левая и правая сторона, i reurency translate to right side) , но у меня проблема с левой стороной дерева. Я не собираюсь это делать. Может ли кто-нибудь дать мне предложение или код? Пожалуйста, помогите :)Предзаказ о доставке в дереве

+0

О, я забыл, у меня есть предварительный заказ и заказ из двух строк;) – pkruk

+0

- это ваше дерево двоичное дерево? – ControlAltDel

+0

Пример, вероятно, будет полезен. – biziclop

ответ

0
public static String a(String pre, String in, int start, int end) { 
      char c = pre.charAt(start); //first char in preorder is root 
      int ix = find(pre, in, c); // if we find this char in inorder translation we know where is left and right side of tree 
      stack += c; 
      if (start == 0 && flaga == true) { 
       left = pre.substring(1, ix + 1); 
       right = pre.substring(ix + 1, end); 
       flaga = false; 
       return a(right, in, 0, end); 
      } 
      String reverse = new StringBuffer(stos).reverse().toString(); 
    //stack to see 
//  System.out.println("STACK " + stos); 
      if (start < right.length()-1) { 
       return a(right, in, start + 1, end - 1); 
      } 
      return ""; 
    } 
    public static int find(String a, String b, char c) { 
     int b_l = b.length(); 
     for (int i = 0; i < b_l; ++i) 
      if (b.charAt(i) == c) 
       return i; 
     return -1; 

Первого теста: Строки предварительной = "FBADCEGIH"; Строка inorder = "ABCDEFGHI"; Ответ должен быть: // A, C, E, D, B, H, I, G, F Моя проблема с левой стороной дерева, у меня нет никакой идеи сделать это правильно, и я не уверен, что мой код работает для всех ситуаций предзаказов и порядка.