层级遍历二叉树的代码结构
void traverse(TreeNode root){
if(root==null) return;
Queue<TreeNode> q=new LinkedList<>();
q.offer(root);
while(!q.isEmpty()){
System.out.println(root.val);
if(cur.left!=null){
q.offer(cur.left);
}
if(cur.right!=null){
q.offer(cur.right);
}
}
}
利用层级遍历实现二叉树的序列化以及反序列化
1.序列化实现
String SEP = ",";
String NULL = "#";
String serialize(TreeNode root) {
if (root == null) return "";
StringBuilder sb = new StringBuilder();
Queue<TreeNode> q =new LinkedList<>();
q.offer(root);
while(!q.isEmpty()){
if(cur==null){
sb.append(NULL).append(ESP);
continue;
}
sb.append(cur.val).append(ESP));
q.offer(cur.left);
q.offer(cur.right);
}
return sb.toString();
2.反序列化实现
TreeNode deserialize(String data) {
if (data.isEmpty()) return null;
String[] nodes = data.split(SEP);
TreeNode root = new TreeNode(Integer.parseInt(nodes[0]));
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
for (int i = 1; i < nodes.length; ) {
TreeNode parent = q.poll();
String left = nodes[i++];
if (!left.equals(NULL)) {
parent.left = new TreeNode(Integer.parseInt(left));
q.offer(parent.left);
} else {
parent.left = null;
}
String right = nodes[i++];
if (!right.equals(NULL)) {
parent.right = new TreeNode(Integer.parseInt(right));
q.offer(parent.right);
} else {
parent.right = null;
}
}
return root;
}