Leetcode---二叉树的序列化与反序列化--递归

二叉树的序列化与反序列化

题目链接:二叉树的序列化与反序列化

思路:
  • 这道题。。。真是让我处理了很久啊。
  • 我的第一思路有两个,1.二叉树的层次遍历,再反序列化构造,这里就要求将二叉树当做完全二叉树遍历,空节点用“#”代替。第二个就是下面的错误思路。。。
  • 错误思路:我记得之前刷过一题,二叉树先序和中序重造二叉树,那么在序列化时,我准备采用将二叉树先序遍历和中序遍历的结果放在一个字符串里,然后序列化时将其拆开即可,顺着这个思路,错误越出越多,其中序列化结果是字符串,后来提交发现二叉树中存在为负值的节点,这就导致我转化为整数出错,正确方式是在每一个节点值拼接之后都再加上“,”,回头再按“,”拆分,这样做按理讲虽然复杂,但是应该也能做出来,我自定义的二叉树进行验证都没有问题,但是提交时遇到一个复杂的二叉树导致我提交错误,至今未发现哪里的问题。
  • 其实先序和中序我们知道其一就可以构造了,特殊的要求是null节点要用其他字符代替,这样我们就可以重造二叉树(之前一直以为一种遍历构造不出来)
  • 下边的代码是递归写的,比较易懂,但是运行时间较长。
public class Codec {
	int index = -1;
	// Encodes a tree to a single string.
	public 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));
		System.out.println(sb.toString());
		return sb.toString();
	}

	// Decodes your encoded data to tree.
	public TreeNode deserialize(String data) {
		String[] temp = data.split(",");
		return deserialize(temp);

	}
	public TreeNode deserialize(String[] temp) {
		++index;
		TreeNode root = null;
		if(!temp[index].equals("#")) {
			root = new TreeNode(Integer.parseInt(temp[index]));
			root.left = deserialize(temp);
			root.right = deserialize(temp);
		}
		return root;

	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值