二叉树的序列化和反序列化-前序遍历 树的结构 * 1 * 2 3 * 4 5 6 7
序列化: 通过前序遍历的顺序拼接字符串,节点联系用下划线_,空节点用#表示 生成的字符串:1_2_4_#_#_5_#_#_3_6_#_#_7_#_# 反序列化: 按照遍历顺序来构建二叉树,第一个数1就是根节点,后边每一个数都是左子节点直到遇到#代表左子节点为空:结束 然后下一个节点就是右节点,如果遇到#代表右子节点为空
代码的反序列化是非递归的方式,使用了栈来处理回退,一个while循环遍历字符串中每一个数,通过IF和else判断,IF代表每一个数都是左子节点直到遇到#结束,else代表处理右子节点。
pre:代表每访问一个数与哪个父节点建立关系
package com.algorithm.tree;
import java.util.Queue;
import java.util.Stack;
import java.util.concurrent.ArrayBlockingQueue;
public class TreeSerialReverse {
static TreeSerialReverse treeSerialReverse;
static TreeNode rootNode;
/**树的结构
* 1
* 2 3
* 4 5 6 7
*/
// 生成的字符串:1_2_4_#_#_5_#_#_3_6_#_#_7_#_#
// 前序遍历是左中右,整个顺序就是左左左左左,直到当前节点没有左节点,然后中节点,再右节点