0
点赞
收藏
分享

微信扫一扫

序列化二叉树

兽怪海北 2021-09-21 阅读 32
今日算法
题目描述:
示例:
思路:
代码实现
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Codec {

    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
        if (root == null) return "[]";
        StringBuilder sb = new StringBuilder();
        sb.append("[");
       Queue<TreeNode> queue = new LinkedList();
       queue.offer(root);
       sb.append(root.val).append(",");
       while (!queue.isEmpty()) {
           TreeNode node = queue.poll();
           if(node.left != null) {
               queue.offer(node.left);
               sb.append(node.left.val).append(",");
            } else {
               sb.append("null,");
            }
           if(node.right != null) { 
               queue.offer(node.right);
               sb.append(node.right.val).append(",");
           } else {
               sb.append("null,");
           }
       }
       sb.deleteCharAt(sb.length() - 1);
       sb.append("]");
       return sb.toString();
    }

    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
        if ("[]".equals(data)) return null;
        String nodeStr = data.substring(1, data.length() - 1);

        String[] nodeArr = nodeStr.split(",");

        Queue<TreeNode> queue = new LinkedList();
        Integer val = Integer.valueOf(nodeArr[0]);
        TreeNode head = new TreeNode(val);
        TreeNode cur = head;
        queue.offer(cur);
        for (int i = 1; i < nodeArr.length;i += 2) {
        
            TreeNode node = queue.poll();
            
            Integer leftVal = getVal(nodeArr, i);
            if (leftVal != null) {
                 TreeNode leftNode = new TreeNode(leftVal);
                 node.left = leftNode;
                 queue.offer(leftNode);
            }

            Integer rightVal = getVal(nodeArr, i + 1); 
            if (rightVal != null) {
                TreeNode rightNode = new TreeNode(rightVal);
                node.right = rightNode;
                 queue.offer(rightNode);
            }
           
        }
         return head;
    }

    public Integer getVal(String[] nodeStr, Integer index) {

        String str = nodeStr[index];
        if ("null".equals(str)) {
            return null;
        }
         Integer val = Integer.valueOf(str);
         return val;
    }
}
举报

相关推荐

0 条评论