zoukankan      html  css  js  c++  java
  • 序列化二叉树-剑指Offer

    序列化二叉树

    题目描述

    请实现两个函数,分别用来序列化和反序列化二叉树

    思路

    1. 序列化就按先序遍历,遇到空指针也要存下来,递归调用,StringBuilder
    2. 反序列化是同样的递归调用,不过要考虑参数的传递,生成的TreeNode要返回
    3. 注意:对Sting[]的遍历,每次递归都要往后遍历一个字符,如果将这个位置信息point通过参数传入的话,就会造成函数无法正常遍历String[],此时,我们可以将位置信息设置为类的成员变量,每次递归时都要递增,这样既可满足条件

    代码

    /*
    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 sb = new StringBuilder();
            mySer(sb, root);
            return sb.toString();
    	}
    	public void mySer(StringBuilder sb, TreeNode root) {
    		if (root == null) {
    			sb.append("$,");
    			return;
    		}
    		sb.append(String.valueOf(root.val));
    		sb.append(",");
    		mySer(sb, root.left);
    		mySer(sb, root.right);
    		return;
    	}
    	int point = -1;
    	TreeNode Deserialize(String str) {
    		String[] strArr = str.split(",");
    		if (strArr[0].equals("$")) {
    			return null;
    		}
    		TreeNode root = myDeser(strArr);
    		return root;
    		
    	}
    	public TreeNode myDeser(String[] str) {
    		point++;
    		if (point == str.length) {
    			return null;
    		}
    		if (!str[point].equals("$")) {
    			TreeNode node = new TreeNode(Integer.parseInt(str[point]));
    			node.left = myDeser(str);
    			node.right = myDeser(str);
    			return node;
    		} else {
    			return null;
    		}
    	}
    }
  • 相关阅读:
    BeyondLinux_Since1991
    TED系列:我们究竟在教AI学习什么
    TED系列:算法的影响
    TED系列:代码-下一代的通用语言
    TED系列:互联网源起故事
    Hadoop-01 搭建hadoop伪分布式运行环境
    JavaSE-26 Swing
    JavaSE-25 AWT
    JavaSE-24 多线程
    JavaSE-23 注解
  • 原文地址:https://www.cnblogs.com/rosending/p/5721944.html
Copyright © 2011-2022 走看看