剑指offer61-序列化二叉树

序列化二叉树

https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84?tpId=13&tqId=11214&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

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

对于处理二叉树的题目的几种思路:
(1)递归
(2)使用栈
(3)使用队列
连续刷的这几道题目都适用

import java.util.Queue;
import java.util.LinkedList;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    String Serialize(TreeNode root) {
        StringBuilder result = new StringBuilder("");
        if(root != null){
            //先访问根节点
            result.append(String.valueOf(root.val));
            //offer poll peek
            Queue<TreeNode> queue = new LinkedList<TreeNode>();
            queue.offer(root);//需要根据队列中存储的元素来作为访问下一个节点的依据。
            while(!queue.isEmpty()){
                //把队列元素的左右子树进行访问,然后加入到队列中。
                TreeNode head = queue.poll();
                if(head.left!= null || head.right!= null){
                    if(head.left == null)
                        result.append(",#");
                    else{
                        result.append("," +

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

小白刷剑指offer 文章被收录于专栏

跟着小白一起刷剑指offer,通过讨论加深印象吧~ 没有人不学习就能够掌握知识,知识就是需要学习的~

全部评论
学习了答主的答案,层序遍历序列化,且叶子节点没有加#;需要请教的问题是:反序列化是如何处理叶子节点的? 例如:层序遍历 12345,其中2为叶子节点;4、5的父节点是3;反序列化按答主的答案,4,5的父节点变成2了,感觉有点不对?
2
送花
回复
分享
发布于 2020-07-14 10:48
想问个愚蠢的问题,题目中要求每个value结束加!,这里加的是“,”但是也AC了,这是一样的意思吗?小白不太理解,谢谢
点赞
送花
回复
分享
发布于 2020-04-17 17:34
秋招专场
校招火热招聘中
官网直投
小姐姐很很厉害啊,现在我每次找答案的时候,都会先找一下你的答案(笑哭脸)。
点赞
送花
回复
分享
发布于 2020-04-26 09:26
日常打卡
点赞
送花
回复
分享
发布于 2020-07-26 08:54
不太对~
点赞
送花
回复
分享
发布于 2021-08-01 00:46

相关推荐

15 2 评论
分享
牛客网
牛客企业服务