网站页面设计风格国家重大建设项目库网站
news/
2025/9/24 2:53:16/
文章来源:
网站页面设计风格,国家重大建设项目库网站,浙江鼎兴建设有限公司网站,wordpress分类目录多级菜单博主简介#xff1a;努力学习的22级计算机科学与技术本科生一枚#x1f338;博主主页#xff1a; 是瑶瑶子啦每日一言#x1f33c;: 你不能要求一片海洋#xff0c;没有风暴#xff0c;那不是海洋#xff0c;是泥塘——毕淑敏 目录 一、核心二、题目2.1:前序遍历2.2努力学习的22级计算机科学与技术本科生一枚博主主页 是瑶瑶子啦每日一言: 你不能要求一片海洋没有风暴那不是海洋是泥塘——毕淑敏 目录 一、核心二、题目2.1:前序遍历2.2完整代码 一、核心 序列化:本质就是二叉树的遍历就那么几个前序、中序、后序、层序。而序列化只不过就是在遍历到节点时把它记录下来空节点也是节点也要记录一般就是#)。反序列化:字符串构建二叉树本质是子问题也就是递归。
其实在前面纲领篇就【数据结构】二叉树篇| 纲领思路01刷题)过序列化的本质就是第一种解题思路——遍历一遍二叉树即可解题反序列化是第二种解题思路——需要递归利用子问题来构建二叉树。所谓的序列化和反序列只不过也是唬人的名头罢了。 二、题目
297. 二叉树的序列化与反序列化
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/
public class Codec {// Encodes a tree to a single string.public String serialize(TreeNode root) {}// Decodes your encoded data to tree.public TreeNode deserialize(String data) {}
}// Your Codec object will be instantiated and called as such:
// Codec ser new Codec();
// Codec deser new Codec();
// TreeNode ans deser.deserialize(ser.serialize(root));注意序列化的具体格式没有要求下面统一按照这种格式1,2,#,4,#,#,3,#,#, 2.1:前序遍历 前序遍历_序列化 String SEP ,;//分隔符用来分隔每个节点String NULL #;//表示当前节点为null// Encodes a tree to a single string.public String serialize(TreeNode root) {StringBuilder sb new StringBuilder();//用来装字符串的容器//遍历函数serialize(root, sb);return sb.toString();}public void serialize(TreeNode root, StringBuilder sb){//进行前序遍历if (root null){sb.append(NULL).append(SEP);}/*******前序位置 */sb.append(root.val).append(SEP);/****************/serialize(root.left, sb);serialize(root.right, sb);}PS一般语境下单单前序遍历结果是不能还原二叉树结构的因为缺少空指针的信息至少要得到前、中、后序遍历中的两种才能还原二叉树。但是这里的 node 列表包含空指针的信息所以只使用 node 列表就可以还原二叉树。 前序遍历_反序列化 // Decodes your encoded data to tree.public TreeNode deserialize(String data) {//用来存储前序序列及其节点方便逐个拿出构建二叉树LinkedListString nodes new LinkedList();for (String node : data.split(SEP)){nodes.addLast(node);}return deserialize(nodes);}public TreeNode deserialize(LinkedListString nodes){if(nodes.isEmpty()){return null;}/****** 前序遍历位置 ******/// 列表最左侧就是根节点String first nodes.removeFirst();if (first.equals(NULL)) return null;TreeNode root new TreeNode(Integer.parseInt(first));//不为空构建根节点/*********************** */root.left deserialize(nodes);root.right deserialize(nodes);return root;}至于其他遍历的解法本质还是一样序列化的本质就是遍历二叉树反序列化的本质就是构建子问题这里就不一一详解。
2.2完整代码
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/
public class Codec {String SEP ,;//分隔符用来分隔每个节点String NULL #;//表示当前节点为null// Encodes a tree to a single string.public String serialize(TreeNode root) {StringBuilder sb new StringBuilder();//用来装字符串的容器//遍历函数serialize(root, sb);return sb.toString();}public void serialize(TreeNode root, StringBuilder sb){//进行前序遍历if (root null){sb.append(NULL).append(SEP);return;}/*******前序位置 */sb.append(String.valueOf(root.val)).append(SEP);/****************/serialize(root.left, sb);serialize(root.right, sb);}// Decodes your encoded data to tree.public TreeNode deserialize(String data) {//用来存储前序序列及其节点方便逐个拿出构建二叉树LinkedListString nodes new LinkedList();for (String node : data.split(SEP)){nodes.addLast(node);}return deserialize(nodes);}public TreeNode deserialize(LinkedListString nodes){if(nodes.isEmpty()){return null;}/****** 前序遍历位置 ******/// 列表最左侧就是根节点String first nodes.removeFirst();if (first.equals(NULL)) return null;TreeNode root new TreeNode(Integer.parseInt(first));//不为空构建根节点/*********************** */root.left deserialize(nodes);root.right deserialize(nodes);return root;}
}// Your Codec object will be instantiated and called as such:
// Codec ser new Codec();
// Codec deser new Codec();
// TreeNode ans deser.deserialize(ser.serialize(root));若有疑问的地方欢迎随时在评论区or私信找瑶瑶子交流讨论 Java岛冒险记【从小白到大佬之路】 LeetCode每日一题–进击大厂 Go语言核心编程 算法
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914650.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!