题解 | #二叉树的序列化#
二叉树的序列化
http://www.nowcoder.com/practice/d6425eab86fc402085f9fafc0db97cc2
直接使用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;}
}