POJ2255 java

先序遍历:根,左,右
中序遍历:左,右,根
后序遍历:左,右,根

每次我们只需要传入树mid中的开始位置,和结束为止
首先,先序遍历的第一个为根元素
我们只需要遍历pre数组中的字符
并找到此字符在mid数组中的对应位置,他就是此树对应的根元素
在mid中他的左边就是他的左子树,右边就是右子树
再分别对左 右子树按照刚才的方法递归
直到开始位置>结束位置说明没有左子树或者右子树了,就输出此结点
import java.util.Scanner;

public class Main2 {
    private static char[] pre;
    private static char[] mid;
    private static int p=-1;//pre数组的指针

    public static void main(String[] args) {
    	Scanner sc=new Scanner(System.in);
    	while(sc.hasNext()) {
    		pre=sc.next().toCharArray();
    		mid=sc.next().toCharArray();
    		tree(0,pre.length-1);
    		System.out.println();
    		p=-1;//指针置为-1
    	}
    }

	private static void tree(int start, int end) {
		if(start>end) {//没有左子树了  或  没有右子树了
			return;
		}
		p++;//首先指针+1
		for (int k = start; k <= end; k++) {//从树的开始位置到结束为止循环
			if(pre[p]==mid[k]) {//找到
				tree(start, k-1);//先输出看左子树
				tree(k+1, end);//再输出右子树
				System.out.print(mid[k]);//最后输出根元素
				break;
			}
		}
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值