1. 题目描述

/**请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。    序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,    序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。
*/

2. 前序遍历

/**先序遍历*/
public class Solution {public int index = -1;/**序列化*/String Serialize(TreeNode root) {StringBuffer sb = new StringBuffer();if(root == null){sb.append("#,");return sb.toString();}sb.append(root.val + ",");//根sb.append(Serialize(root.left));//左sb.append(Serialize(root.right));//右return sb.toString();}/**反序列化*/TreeNode Deserialize(String str) {index++;String[] strr = str.split(",");TreeNode node = null;if(!strr[index].equals("#")){node = new TreeNode(Integer.valueOf(strr[index]));//根node.left = Deserialize(str);//左node.right = Deserialize(str);//右
        }return node;}
}

3. 层次遍历

//采用层序遍历,不需要将转化为完全二叉树的简单方法
public class Solution {String Serialize(TreeNode root) {StringBuilder sb = new StringBuilder();Queue<TreeNode> queue = new LinkedList<TreeNode>();if(root != null)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++];treeNodes[i].right = treeNodes[j++];}}return treeNodes[0];}
}

转载于:https://www.cnblogs.com/haimishasha/p/11520936.html

剑指offer:序列化二叉(前序遍历+层次)相关推荐

  1. 【LeetCode】剑指 Offer 33. 二叉搜索树的后序遍历序列

    [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 文章目录 [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 package offer;public cl ...

  2. 剑指offer之二叉搜索树的后序遍历序列

    剑指offer之二叉搜索树的后序遍历序列 欢迎关注作者博客 简书传送门 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个 ...

  3. 剑指 Offer 33. 二叉搜索树的后序遍历序列

    剑指 Offer 33. 二叉搜索树的后序遍历序列 原始题目链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian- ...

  4. 【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点

    [LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 文章目录 [LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 一.中序遍历(提前返回) 一.中序遍历(提前返回) ...

  5. 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表

    [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 文章目录 [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 package offer;//定义节点 class ...

  6. 剑指offer 33. 二叉搜索树的后序遍历

    声明:本系列博客是对何海涛<剑指offer>的关键点总结. 1.问题描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果,如果是返回true,否则返回false.假设输入的数 ...

  7. 【Java】 剑指offer(36) 二叉搜索树与双向链表

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不 ...

  8. 【剑指offer】二叉搜索树转双向链表,C++实现

    原创博文,转载请注明出处! # 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二叉树节点的定义 struct TreeNod ...

  9. 2021-08-19剑指 Offer 36. 二叉搜索树与双向链表

    我的思路: 前序遍历保证链表的有序性,并且在这个遍历的同时调整指针的指向 class Solution {public:Node* treeToDoublyList(Node* root) {if(r ...

  10. 【超100%解法】剑指 Offer 33. 二叉搜索树的后序遍历序列

    立志用最少的代码做最高效的表达 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 示例 1: 输入: ...

最新文章

  1. excel两个指标相关性分析_Excel实操分析函数,投资决策指标的假设分析,就是那么简单...
  2. python中的encode()和decode()函数
  3. python文件命名文件夹怎么删除_python文件批量重命名、删除文件夹
  4. nginx代理转发_学了三年的性能调优,你还不懂Nginx?怎么跳槽涨薪
  5. 带缓冲的I/O操作和不带缓冲的I/O操作
  6. 票根不符合目标服务_谷歌优化怎么收费?教你选择高性价比的SEO服务!
  7. Mysql安装问题汇总
  8. 记一次 .NET医院公众号程序 线程CPU双高分析
  9. php图片编辑失真,PHP处理图片固定大小 不失真 不变形
  10. 深度学习“炼丹”难?三分钟带你了解国产丹炉旷视天元
  11. android 代码添加图片不显示,Android开发 从代码里设置Drawable图片不显示的问题
  12. html没有代码补全 vscode_借助clangd实现VSCode C++代码补全
  13. package报错情况下如何修改
  14. 图像分割(一):K-means聚类算法
  15. Java基础篇:if控制语句
  16. 微软Windows 10警告用户不要安装下载CCleaner,认为CCleaner是潜在危险软件(2020激活码序列号秘钥)
  17. 计算机频率原理,频率计数器的工作原理和发展
  18. 双击div变成可编辑区的简单实现
  19. huffman python,哈夫曼(Huffman)编码python代码实现
  20. 如何下载台湾硕博论文

热门文章

  1. 围绕sqlite构建一个简单的Typescript ORM
  2. Visual Studio 2019 for Mac 8.6 发布
  3. MySQL 8.0来了,逆之者亡...
  4. 实现机器学习的循序渐进指南I——KNN
  5. VSCode TODO 帮助扩展
  6. 九里机器人_电子科技大学九里堤校区青少年科教基地为农民工留守子女开展科技讲学公益活动...
  7. java 实现nfa的化简_NFA的实现
  8. php判断访问的当前设备是手机还是电脑
  9. 微信小程序获取上一页路由 获取从哪个页面跳转进来的
  10. 联想服务器imm默认地址_命令下配置ip地址