value=="#"为啥等于false,想不明白。。
改成equals就行了,两个东西不是一样的吗?
我一定是疯了,见鬼
源码如下:
package base.chapter3;
import java.util.LinkedList;
import java.util.Queue;
/**
* 二叉树的序列化和反序列化
*/
public class SeriesOrUnSeries {
/**
* 先序遍历序列化
* #表示null
* _表示遍历节点结束
*/
public static String preOrderSeries(Node head){
if (head==null){
return "#_";
}
String res = (String) head.value+"_"; //处理当前节点,加下划线结束
res += preOrderSeries(head.left); //处理左树
res += preOrderSeries(head.right); //处理右树
return res;
}
/**
* 先序遍历反序列化
* 将字符串处理一下,按照下划线分割出每一个值,做出一个队列。按照先序遍历的方式,消费这个队列,建立节点
*/
public static Node preOrderRecon(String seriesValue){
Queue queue = new LinkedList<String>();
String[] array = seriesValue.split("_");
for (int i=0;i<array.length;i++){
queue.offer(array[i]);
}
return preOrderReconProcess(queue);
}
public static Node preOrderReconProcess(Queue<String> queue){
String value = (String) queue.poll();
if (value == "#" || queue.isEmpty())
return null;
Node head = new Node(value); //头
head.left = preOrderReconProcess(queue); //左
head.right = preOrderReconProcess(queue); //右
return head;
}
public static void main(String[] args) {
Node head = Node.generateTreeNode();
//序列化
String s1 = preOrderSeries(head);
System.out.println(s1);
//反序列化
Node head2 = preOrderRecon(s1);
String s2 = preOrderSeries(head2);
System.out.println(s2);
}
}
想不明白,先记录一下,哪位大佬如果知道的话请评论区指点一二,非常谢谢!