class Tree_1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Please Create The Bin_TRee:\t");
String s = sc.nextLine();
Getchar getchar = new Getchar(s);
BinTRee b = new BinTRee('0');
BinTRee d = b.CreateBtree(getchar);
d.pre();
System.out.println();
d.post();
sc.close();
}
}
class Getchar {
private String data;
private int pos = 0;
public Getchar(String data) {
this.data = data;
}
public char getChar() {
int i = pos;
pos++;
return data.charAt(i);
}
}
class Stack {
BinTRee[] btree = new BinTRee[20];
int top = 0;
boolean isEmpty() {
return top == 0;
}
public void push(BinTRee t) {
btree[top] = t;
top++;
}
public BinTRee pop() {
top--;
return btree[top];
}
public BinTRee top() {
return btree[top - 1];
}
}
class BinTRee {
char value;
BinTRee L, R;
int flag = 0;
public BinTRee(char value) {
this.value = value;
}
public void pre() {
System.out.print(value + " ");
if (this.L != null)
L.pre();
if (this.R != null)
R.pre();
}
public BinTRee CreateBtree(Getchar b) {
char x = b.getChar();
if (x == '#')
return null;
BinTRee t = new BinTRee(x);
t.L = CreateBtree(b);
t.R = CreateBtree(b);
return t;
}
public void post() {
BinTRee t = this;
Stack stack = new Stack();
stack.push(t);
for (; !stack.isEmpty();) {
t = stack.top();
if (t == null) {
stack.pop();
} else {
if (t.flag == 0) {
stack.push(t.L);
t.flag = 1;
} else if (t.flag == 1) {
stack.push(t.R);
t.flag = 2;
} else if (t.flag == 2) {
System.out.print(t.value + " ");
stack.pop();
}
}
}
}
}