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;
    		}
    	}
    }
  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    leetcode 213. 打家劫舍 II JAVA
    leetcode 48. 旋转图像 java
    leetcode 45. 跳跃游戏 II JAVA
    leetcode 42. 接雨水 JAVA
    40. 组合总和 II leetcode JAVA
    24. 两两交换链表中的节点 leetcode
    1002. 查找常用字符 leecode
    leetcode 23. 合并K个排序链表 JAVA
  • 原文地址:https://www.cnblogs.com/rosending/p/5721944.html
Copyright © 2011-2022 走看看