二叉树的序列化和反序列化 腾讯算法题

    技术2025-06-01  18

    package pers.machi; import com.google.common.base.Joiner; import java.util.*; public class BinaryTreeSerde { public static void main(String[] args) throws InterruptedException { TreeNode root4 = new TreeNode(4); TreeNode node3 = new TreeNode(3); TreeNode node7 = new TreeNode(7); TreeNode node6 = new TreeNode(6); TreeNode node8 = new TreeNode(8); root4.left = node3; root4.right = node7; node7.left = node6; node7.right = node8; /* * 4 * / \ * 3 7 * / \ / \ * N N 6 8 * / \ / \ * N N N N * */ List<TreeNode> serializedTree = serialize(root4); System.out.println(Joiner.on(",").useForNull("null").join(serializedTree)); System.out.println(Joiner.on(",").useForNull("null").join( serialize(deserialize(serializedTree)))); } public static List<TreeNode> serialize(TreeNode root) { List<TreeNode> serializedTree = new LinkedList<>(); Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { TreeNode current = queue.poll(); if (current != null) { queue.offer(current.left); queue.offer(current.right); } serializedTree.add(current); } return serializedTree; } public static TreeNode deserialize(List<TreeNode> serializedTree) throws InterruptedException { Queue<TreeNode> serializedTreeQueue = (Queue) serializedTree; int num=serializedTreeQueue.size(); Queue<TreeNode> waitTBPorcess = new LinkedList<>(); TreeNode root = serializedTreeQueue.poll(); waitTBPorcess.offer(root); int cnt=0; while (cnt<num) { Thread.sleep(100); TreeNode left = serializedTreeQueue.poll(); TreeNode right = serializedTreeQueue.poll(); TreeNode current = waitTBPorcess.poll(); cnt++; System.out.println(current+" "+cnt); if (current != null) { current.left = left; current.right = right; } waitTBPorcess.offer(left); waitTBPorcess.offer(right); } return root; } }
    Processed: 0.009, SQL: 9