题解 | 序列化二叉树

序列化二叉树

https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84

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

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

    }

}
*/
public class Solution { 
    List<String> list = new ArrayList<>();

    int mid;
    int i = 0;
    String []s1;
    String []s2;
    
    String Serialize(TreeNode root) {
        perOrder(root);
        midOrder(root);
        return String.join(",",list);  
        }
    TreeNode Deserialize(String str) {

        if(str.isEmpty()||str == null){

            return null;

        }
        String []s  = str.split(",");

        s1 = Arrays.copyOfRange(s,0,s.length/2);
        s2 = Arrays.copyOfRange(s,s.length/2,s.length);

       return order(s2,s1[i]);
    }


    void perOrder(TreeNode root){


        if(root!=null){

            list.add(root.val+"");

            perOrder(root.left);

            perOrder(root.right);
        }
    }

    void midOrder(TreeNode root){


        if(root!=null){
            midOrder(root.left);

            list.add(root.val+"");

            midOrder(root.right);
        }
    }

    TreeNode order(String []s,String val){

        if(i>=s1.length-1){

            i = 0;
        }

        if(s.length == 0){
            i--;
            return null;
        }

         if(s.length == 1){
            return new TreeNode(Integer.valueOf(s[0]));
        }

        int mid = getIndex(s,val);

        if(mid == -1){

            return null;

        }
        TreeNode node1 = new TreeNode(Integer.valueOf(val));

        TreeNode nodeLeft  = order(Arrays.copyOfRange(s,0,mid),s1[++i]);

        TreeNode nodeRight = order(Arrays.copyOfRange(s,mid+1,s.length),s1[++i]);

        if(nodeLeft == null){
            node1.left = order(Arrays.copyOfRange(s,0,mid),s1[++i]);
        }else{
            node1.left = nodeLeft;
        }

        if(nodeRight == null){
            node1.right = order(Arrays.copyOfRange(s,mid+1,s.length),s1[++i]);
        }else{
            node1.right = nodeRight;
        }
        return node1;
    }

    int getIndex(String []s,String val){

        for(int j = 0;j<s.length;j++){

            if( s[j].equals(val)){
                return j;
            }
        }

        return -1;


    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-05 15:27
点赞 评论 收藏
分享
缒梦&独舞:这家公司是这样的,去年给我实习offer了,不过也是面着玩儿的,他周六还要去做公益志愿活动
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务