[leetcode]297. Serialize and Deserialize Binary Tree一般二叉树的编解码
2024-09-04 04:03:06
由于一般的前序遍历不能唯一的还原出原本你的二叉树,所以要改变一下:
记录二叉树的结构信息,也就是空节点用符号表示
一般的前序遍历只是记录了节点的前后顺序,通过记录空节点,每一层的结构就可以记录下来
解码的时候可以按照前序的顺序依次还原节点。
/*
前序遍历或者层序遍历都可以,前序遍历要保存二叉树的结构信息
空节点用符号表示
*/
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;
}
最新文章
- python文件读写的学习
- can&#39;t debug windows service in win7 64bit
- vueJs+webpack单页面应用--vue-router配置
- 5、IMS网元
- linux 终端全局代理设置
- onActivityResult调用不到的问题
- hdu 3944 DP? 组合数取模(Lucas定理+预处理+帕斯卡公式优化)
- phpcms 源码分析三:common.inc.php
- CAD2014启动出现loadlibrary failed with error 87
- 旧版QT的名称:qt-win-commercial-4.4.3-vc60.exe
- intellig idea 快捷键
- 对pathtracing的一些个人理解
- node 当中的 cnpm和npm 的区别和使用
- Vxworks驱动程序的结构
- Sql 08数据库还原数据库时一直提示数据库被占用
- 基于cookie的SSO单点登录系统
- [luogu3455][POI2007]ZAP-Queries【莫比乌斯反演】
- 【做题】codechefCOUNTARI——分块FFT
- win10 下载安装eclipse
- Server2003+IIS6+TP-Link+花生壳配置