• [leetcode]297. Serialize and Deserialize Binary Tree一般二叉树的编解码


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

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

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

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

     /*
        前序遍历或者层序遍历都可以,前序遍历要保存二叉树的结构信息
        空节点用符号表示
         */
        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;
        }
  • 相关阅读:
    c#可以做什么
    C#是否快被年代所筛选?
    在.NET程序中,C#办法可用来封装代码
    关于程序员的小故事
    码农需了解的代码编写标准
    关于HTML代码的技巧
    分析一波编程语言的前景
    彻底解决Linux索引节点(inode)占用率高的告警
    Python29之字符str与字节bytes
    Python28之文件1
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8376806.html
Copyright © 2020-2023  润新知