二叉树建树与前后续遍历(Java版)

16 篇文章 0 订阅
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();
				}
			}
		}

	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值