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;
    		}
    	}
    }
  • 相关阅读:
    Ubuntu开源推进全面展开抢占微软市场
    sb600芯片下,操持ubuntu没有声响的要领(ubuntu8.04上乐成)
    centos下设置ssh衔接工夫
    入门linux
    centos下进入单用户情势
    ubuntu hardy下的smtp管事
    MySQL数据库中查找执行从命慢的SQL语句
    mac、xp、linux共存
    Linux和Windows终究哪个更适用
    Debian下的mozilla眷属
  • 原文地址:https://www.cnblogs.com/rosending/p/5721944.html
Copyright © 2011-2022 走看看