☰
【层序遍历】序列化二叉树
2026/10/23 12:52:15 网站建设 项目流程


求解代码

StringSerialize(TreeNoderoot){StringBuildersb=newStringBuilder();if(root!=null){Queue<TreeNode>queue=newLinkedList<>();queue.add(root);sb.append(root.val+",");// 先存入根节点值while(!queue.isEmpty()){root=queue.poll();// 取出队首的待处理节点// 严格先处理左孩子:有值存值+逗号,无值存# +逗号if(root.left!=null){sb.append(root.left.val+",");queue.add(root.left);}else{sb.append("#,");}// 严格后处理右孩子:有值存值+逗号,无值存# +逗号if(root.right!=null){sb.append(root.right.val+",");queue.add(root.right);}else{sb.append("#,");}}}returnsb.toString();}TreeNodeDeserialize(Stringstr){if(str.equals("")){returnnull;}String[]nodes=str.split(",");// 按分隔符拆分出所有节点内容intindex=0;TreeNoderoot=generate(nodes[index++]);// 第一个元素是根节点Queue<TreeNode>queue=newLinkedList<>();queue.add(root);while(!queue.isEmpty()){TreeNodecur=queue.poll();// 取出待分配子节点的父节点cur.left=generate(nodes[index++]);// 严格先分配左孩子cur.right=generate(nodes[index++]);// 严格后分配右孩子// 只有非空节点才有子节点,需要入队等待分配子节点if(cur.left!=null)queue.add(cur.left);if(cur.right!=null)queue.add(cur.right);}returnroot;}TreeNodegenerate(Stringval){returnval.equals("#")?null:newTreeNode(Integer.parseInt(val));}

小贴士:

Integer.parseInt ()和Integer.valueOf ()
这俩都是 Java 中把「数字格式的字符串」转为整数 的核心静态方法,最核心的区别只有一个:
✅Integer.parseInt(String s)→ 返回基本数据类型int
✅Integer.valueOf(String s)→ 返回包装类对象Integer

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询