已知树的前序、中序,求后序的java实现&已知树的后序、中序,求前序的java实现

public class Order {
	
	int findPosInInOrder(String str,String in,int position){
		char c = str.charAt(position);
		int length = in.length();
		for(int i=0;i<length;i++){
			if(c==in.charAt(i))
				return i;
		}
		return -1;
	}
	/**
	 * 已知前序和中序,求后序
	 * @param preOrder
	 * @param inOrder
	 */
	void postOrder(String preOrder,String inOrder,int length){
		if(1==length){
			System.out.println(inOrder);
			return;
		}
		if(0==length){
			return;
		}
		int index = findPosInInOrder(preOrder, inOrder,0);
		String inOrder_left = inOrder.substring(0,index);
		String inOrder_right = inOrder.substring(index+1);
		
		String preOrder_left = preOrder.substring(1,1+index);
		String preOrder_right = preOrder.substring(index+1);
		
		postOrder(preOrder_left,inOrder_left,inOrder_left.length());
		postOrder(preOrder_right,inOrder_right,inOrder_right.length());
		
		System.out.println(preOrder.charAt(0));
		
	}
	/**
	 * 已知后序、中序,求先序
	 * @param postOrder
	 * @param inOrder
	 * @param length
	 */
	void preOrder(String postOrder,String inOrder,int length){
		if(1==length){
			System.out.println(inOrder);
			return;
		}
		if(0==length){
			return;
		}
		int index = findPosInInOrder(postOrder, inOrder,postOrder.length()-1);
		String inOrder_left = inOrder.substring(0,index);
		String inOrder_right = inOrder.substring(index+1);
		
		String postOrder_left = postOrder.substring(0,index);
		String postOrder_right = postOrder.substring(index+1,postOrder.length()-1);
		
		System.out.println(postOrder.charAt(postOrder.length()-1));
		preOrder(postOrder_left,inOrder_left,inOrder_left.length());
		preOrder(postOrder_right,inOrder_right,inOrder_right.length());
		
		
		
	}
	public static void main(String args[]){
		Order order= new Order();
		String pre="ABDEC";
		String in="DBEAC";
		String post = "DEBCA";
		order.postOrder(pre, in, in.length());
		
		System.out.println("********************************");
		order.preOrder(post, in, in.length());
	}

}
注意输出语句的顺序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值