剑指offer37. 序列化,反序列化二叉树 P194(书上用的流操作)

mac2025-08-06  18

剑指offer37. 序列化,反序列化二叉树 P194(书上用的流操作)

题目:请实现两个函数,分别用来序列化和反序列化二叉树。 比如:下面这颗树的先序序列化是: 1 2 $ $ 3 $ $ ($表示空节点)

1 / \ 2 3

// 序列化二叉树 ,用队列模拟流操作

void serilize(BinaryTreeNode *root, queue <char> &q) { if (root == NULL) { q.push('$'); return; } q.push(root -> m_nValue ); serilize(root -> m_pLeft, ans); serilize(root -> m_pRight, ans); }

// 反序列化二叉树 ,根据序列q,还原二叉树

void reverseSerilize(BinaryTree **root, queue<char> &q) { if (q.empty()) return; if (q.fornt() == '$') {//当前节点是空,无操作,因为下面在创建节点时左右节点默认空 q.pop(); return; } *root = new BinaryTreeNode(); (*root) -> m_nValue = q.front(); q.pop(); (*root) -> m_pLeft = NULL; (*root) -> m_pRight = NULL; reverseSerilize(&((*root) -> m_pLeft), q); reverseSerilize(&((*root) -> m_pRight), q); }
最新回复(0)