序列化与反序列化二叉树

宽度优先

public class Solution {
  // 序列化, 将二叉树转换为字符串
    String Serialize(TreeNode root) {
    	if (root == null)
			return "#,";
		Queue<TreeNode> queue = new LinkedList<>();
		queue.add(root);
		String seria = root.val + ",";
		while (!queue.isEmpty()) {
			root = queue.poll();
          // 如果子节点不为空, 则加入队列并写入值
			if (root.left != null) {
				seria += root.left.val + ",";
				queue.add(root.left);
			} else {
              // 为空时写入#
				seria += "#,";
			}
			if (root.right != null) {
				seria += root.right.val + ",";
				queue.add(root.right);
			} else {
				seria += "#,";
			}
		}
		return seria;
    }
      // 反序列化, 将字符串转换为二叉树结构
    TreeNode Deserialize(String str) {
      // 分割字符串
        String[] nodes = str.split(",");
      // 存放序列号值的队列
        Queue<String> queue = new LinkedList<>(Arrays.asList(nodes));
      // help队列, 队头为待设置子树的根节点
        Queue<TreeNode> help = new LinkedList<>();
      // 解析根结点
        String first = queue.poll();
      // 如果第一个字符为#则为空树
        if(first.equals("#"))
            return null;
      // 创建节点并放入help队列
        TreeNode root = new TreeNode(Integer.parseInt(first));
        help.add(root);
        while(!help.isEmpty()) {
          // 从help队列获取待处理的根节点
            TreeNode head = help.poll();
          // 从队列获取一个值,如果不为#则为其创建子节点, 并将子节点入队, 否则子树为空
            String left = queue.poll();
            if(left.equals("#")) {
                head.left = null;
            } else {
                head.left = new TreeNode(Integer.parseInt(left)); 
                help.add(head.left);
            }
            String right = queue.poll();
            if(right.equals("#")) {
                head.right = null;
            } else {
                head.right = new TreeNode(Integer.parseInt(right)); 
                help.add(head.right);
            }
        }
        return root;
    }
}
posted @   brbrbr  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示