AcWing 1259. 二叉树遍历
原题链接
中等
作者:
JAVA小老弟
,
2020-08-02 11:36:32
,
所有人可见
,
阅读 991
import java.io.*;
import java.util.*;
public class Main{
static int[] used = new int[40];
static String res="";
public static void dfs(Node root){
if(root==null)
return ;
res = res + root.val;
dfs(root.left);
dfs(root.right);
return ;
}
public static void main(String args[]) throws IOException{
BufferedReader r= new BufferedReader(new InputStreamReader(System.in));
String line[] = r.readLine().split(" ");
String inorder = line[0];
String line2[] = r.readLine().split(" ");
String loader = line2[0];
Map<Character,Integer> map = new HashMap<>();
for(int i=0;i<inorder.length();i++)
map.put(inorder.charAt(i),i);
Node[] queue = new Node[30];
queue[0] = new Node(loader.charAt(0));
for(int i =0,j=1;j<loader.length();){//i是当前的起点 j是下一层开始的起点 下一层起点的位置一开始是1 后面的话会变动i 也是
for(int end = j;i<end;i++){//遍历当前结点的左右子树是不是都存在 遍历位置为i到j-1 先做备份end 否则j会变动
//先输出在中序遍历中的位置
int position = map.get(loader.charAt(i));//得到当前元素在中序遍历中的位置
used[position] = 1;//已经使用
if(position-1>=0 && used[position-1]==0){//查找中序遍历中左元素和右元素是不是被使用过
queue[i].left = new Node(loader.charAt(j));//没有被使用过 添加层次遍历的下一个元素
queue[j++] = queue[i].left;//并且将该元素添加到 队列中
}
if(position +1<loader.length() && used[position+1]==0){
queue[i].right = new Node(loader.charAt(j));
queue[j++] = queue[i].right;
}
}
}
dfs(queue[0]);
System.out.println(res);
}
}
class Node{
char val;
Node left;
Node right;
public Node(char val){
this.val = val;
}
}