h****p 发帖数: 87 | |
d********i 发帖数: 582 | |
l*****a 发帖数: 14598 | 3 抛砖引玉
苯法:use preOrder/InOrder
好点的:store the BT in level order,use '#' as null node
然后按照这个规律重新生成BT.
不知还有什么办法
【在 h****p 的大作中提到】 : RT : 多谢大家
|
J*****a 发帖数: 4262 | 4 这是linkedin第一轮电面的一位国人大哥给我的“warm-up”题,首先是序列化
我写成了tree类的成员函数,所以没有把root当成方法的参数
public void serialize(){
File file = new File("test.txt");
if(root == null) return;
FileWriter fw = null;
try{
fw = new FileWriter(file);
BufferedWriter bf = new BufferedWriter(fw);
Queue q = new LinkedList();
q.add(root);
while(!q.isEmpty()){
Node cur = q.poll();
if(cur == null) bf.write("# ");
else{
bf.write(cur.data + " ");
if(cur.left == null) q.add(null);
else q.add(cur.left);
if(cur.right == null) q.add(null);
else q.add(cur.right);
}
}
bf.flush();
bf.close();
}
catch(Exception e){}
} |
J*****a 发帖数: 4262 | 5 下面是反序列化
public static Node deserialize(String filename){
Node root = null;
File file = new File(filename);
try{
Scanner scanner = new Scanner(file);
if(scanner.hasNext()) {
String tmp = scanner.next();
if(tmp.equals("#")) {scanner.close();return null;}
else {
Node node = new Node(Integer.parseInt(tmp));
root = node;
}
}
else {scanner.close(); return null;}
Queue q = new LinkedList();
q.add(root);
while(!q.isEmpty()){
Node cur = q.poll();
Node left = null;
Node right = null;
if(scanner.hasNext()){
String tmp = scanner.next();
if(!tmp.equals("#")){
left = new Node(Integer.parseInt(tmp));
q.add(left);
}
}
if(scanner.hasNext()){
String tmp = scanner.next();
if(!tmp.equals("#")){
right = new Node(Integer.parseInt(tmp));
q.add(right);
}
}
cur.left = left;
cur.right = right;
}
scanner.close();
}catch(Exception e){}
return root;
} |
d********i 发帖数: 582 | 6
谢谢你!!
【在 J*****a 的大作中提到】 : 下面是反序列化 : public static Node deserialize(String filename){ : Node root = null; : File file = new File(filename); : try{ : Scanner scanner = new Scanner(file); : if(scanner.hasNext()) { : String tmp = scanner.next(); : if(tmp.equals("#")) {scanner.close();return null;} : else {
|
m***p 发帖数: 86 | 7 我的g家第二次电面也是这个问题, 只要把null存储的话(比如用#),那么只需要
preorder一下就可以了, 我当时用level order, 其实没有必要 |
l********1 发帖数: 24 | |