直接使用sout会超时,需要使用StringBuilder

import java.util.*;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
        String[] s1=input.readLine().split(" ");      
        Queue<Tnode> nodes=new LinkedList<>();
        int num=Integer.parseInt(s1[0]);
        Tnode root=creatTN(input);
        StringBuilder sb = new StringBuilder();
        preOrder(root,sb);
        System.out.println(sb);
        sb.delete(0,sb.length());
        nodes.offer(root);
        cxOrder(nodes,sb); 
        System.out.println(sb);
        input.close();
    }
    //创建二叉树
    public static Tnode creatTN(BufferedReader input) throws IOException{
        String[] s=input.readLine().split(" ");
        Tnode node=new Tnode(Integer.parseInt(s[0]));
        if(Integer.parseInt(s[1])!=0){
            node.l=creatTN(input);
        }
        if(Integer.parseInt(s[2])!=0){
            node.r=creatTN(input);
        }
        return node;
    }    
    //先序遍历
    public static void preOrder(Tnode node,StringBuilder sb){
        if(node!=null){
            sb.append(node.val+"!");
            preOrder(node.l,sb);
            preOrder(node.r,sb);
        }else{sb.append("#!");}        
    }
    //层序遍历
    public static void cxOrder(Queue<Tnode> nodes,StringBuilder sb){
        if(!nodes.isEmpty()){
            Tnode temp=nodes.poll();
            if(temp!=null){
                sb.append(temp.val+"!");
                nodes.offer(temp.l);
                nodes.offer(temp.r);
            }else{
                sb.append("#!");
            }
            cxOrder(nodes,sb);
        }
    }    
}
class Tnode{
    public int val;
    public Tnode l;
    public Tnode r;
    public Tnode(){};
    public Tnode(int val){this.val=val;}
}