题解 | #序列化二叉树#

序列化二叉树

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

参考别人的代码,层序遍历,用!做分割,用#代表空指针,这里的层序遍历空指针也要遍历进去。
/*,
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
import java.util.*;
public class Solution {
    
    String Serialize(TreeNode root) {
        StringBuilder sb=new StringBuilder();
        Queue<TreeNode> queue=new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()){
            int len=queue.size();
            for(int i=0;i<len;i++)
            {
                TreeNode tmp=queue.poll();
                if(tmp!=null){    //与一般的层序遍历不一样,这里把空指针也放进去了
                    sb.append(String.valueOf(tmp.val)+"!");
                    queue.add(tmp.left);
                    queue.add(tmp.right);
                }
                else{
                    sb.append("#!");     //用!分割,用#代替null
                }
            }

        }
        return sb.toString();
    }
    TreeNode Deserialize(String str) {
        int n=str.length();
        Queue<TreeNode> queue=new LinkedList<>();
        Queue<String> q=new LinkedList<>();
        String[]s=str.split("!");
        for(int i=0;i<s.length;i++){
            q.add(s[i]);
        }
        String rootVal=q.poll();
        if(rootVal.equals("#")){
            return null;
        }
        TreeNode root=new TreeNode(Integer.parseInt(rootVal));
        queue.add(root);
        while(!queue.isEmpty()){
            int len=queue.size();
            for(int i=0;i<len;i++){
                TreeNode tmp=queue.poll();
                String leftVal=q.poll();
                String rightVal=q.poll();
                TreeNode treeNodeL=leftVal.equals("#")?null:new TreeNode(Integer.parseInt(leftVal));
                TreeNode treeNodeR=rightVal.equals("#")?null:new TreeNode(Integer.parseInt(rightVal));
                tmp.left=treeNodeL;
                tmp.right=treeNodeR;
                if(treeNodeL!=null){
                    queue.add(treeNodeL);
                }
                if(treeNodeR!=null){
                    queue.add(treeNodeR);
                }
             }
        }
        return root;
       
    }
}
全部评论

相关推荐

10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务