层次,利用树数组来做,这个数组既用来遍历根节点,其次使用其连接左右节点
我只想到这样编码,解码那里想复杂了,感觉缺点什么,原来是缺点智商
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.LinkedList;
import java.util.Queue;
public class Solution {
String Serialize(TreeNode root) {
StringBuilder sb = new StringBuilder();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
if(root==null) {
return "#,";
}
queue.add(root);
while(!queue.isEmpty()) {
TreeNode node = queue.poll();
if(node!=null) {
queue.offer(node.left);
queue.offer(node.right);
sb.append(node.val + ",");
}else {
sb.append("#"+",");
}
}
if(sb.length() != 0)
sb.deleteCharAt(sb.length()-1);
return sb.toString();
}
TreeNode Deserialize(String str) {//解码部分,居然利用的树数组来做,可以
TreeNode head = null;
if(str == null || str.length() == 0)//特判
return head;
String[] nodes = str.split(",");
TreeNode[] treeNodes = new TreeNode[nodes.length];
for(int i=0; i<nodes.length; i++){
if(!nodes[i].equals("#"))
treeNodes[i] = new TreeNode(Integer.valueOf(nodes[i]));
}
for(int i=0, j=1; j<treeNodes.length; i++){
if(treeNodes[i] != null){//如果空的话
treeNodes[i].left = treeNodes[j++];//用i记录当前的位置,
treeNodes[i].right = treeNodes[j++];//用j记录需要滑动的位置。
}
}
return treeNodes[0];
}
}


京公网安备 11010502036488号