由于一般的前序遍历不能唯一的还原出原本你的二叉树,所以要改变一下:

记录二叉树的结构信息,也就是空节点用符号表示

一般的前序遍历只是记录了节点的前后顺序,通过记录空节点,每一层的结构就可以记录下来

解码的时候可以按照前序的顺序依次还原节点。

 /*
前序遍历或者层序遍历都可以,前序遍历要保存二叉树的结构信息
空节点用符号表示
*/
StringBuilder s = new StringBuilder();
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
preTra(root);
return new String(s);
}
public void preTra(TreeNode root)
{
if (root==null)
{
//#代表空节点
s.append("#");
s.append(",");
return;
}
s.append(root.val);
s.append(",");
preTra(root.left);
preTra(root.right);
} // Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
if (data.length()==0) return null;
String[] d = data.split(",");
//用一个链表记录节点,在调用函数中对链表进行改变是会改变堆中真正的链表的
LinkedList<String> list = new LinkedList<>();
for (String s :
d) {
list.add(s);
}
return dehelper(list);
}
public TreeNode dehelper(LinkedList<String> list)
{
//pollfirst和poll的区别是,前者在为空时会返回null
String s = list.pollFirst();
if (s==null||s.equals("#")) return null;
//按照前序遍历的顺序,依次把节点放回去
TreeNode cur = new TreeNode(Integer.parseInt(s));
cur.left = dehelper(list);
//注意下边这list和上边的list已经不一样了,因为在上边函数中改变了
// 虽然传入的是list变量的副本,但是原本和副本都是指向一个地址,都会造成改变
cur.right = dehelper(list);
return cur;
}

最新文章

  1. python文件读写的学习
  2. can&#39;t debug windows service in win7 64bit
  3. vueJs+webpack单页面应用--vue-router配置
  4. 5、IMS网元
  5. linux 终端全局代理设置
  6. onActivityResult调用不到的问题
  7. hdu 3944 DP? 组合数取模(Lucas定理+预处理+帕斯卡公式优化)
  8. phpcms 源码分析三:common.inc.php
  9. CAD2014启动出现loadlibrary failed with error 87
  10. 旧版QT的名称:qt-win-commercial-4.4.3-vc60.exe
  11. intellig idea 快捷键
  12. 对pathtracing的一些个人理解
  13. node 当中的 cnpm和npm 的区别和使用
  14. Vxworks驱动程序的结构
  15. Sql 08数据库还原数据库时一直提示数据库被占用
  16. 基于cookie的SSO单点登录系统
  17. [luogu3455][POI2007]ZAP-Queries【莫比乌斯反演】
  18. 【做题】codechefCOUNTARI——分块FFT
  19. win10 下载安装eclipse
  20. Server2003+IIS6+TP-Link+花生壳配置

热门文章

  1. 03Python网络编程系列之服务端
  2. passwrod和shadow文件介绍
  3. 单调栈高封装模板hia hia hia
  4. PyQt(Python+Qt)学习随笔:model/view架构中类QStandardItemModel的使用方法
  5. Tomcat是如何加载Spring和SpringMVC及Servlet相关知识
  6. 20192313 实验一《Linux基础与Java开发环境》实验报告
  7. 【自用】Notice
  8. mac系统下用ssh方式连接git仓库
  9. Jenkins的war包安装
  10. Azure应用服务+Github实现持续部署