本文主要是介绍保研机试之【二叉树序列化】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
老规矩咯:
参考:东哥带你刷二叉树(序列化篇) | labuladong 的算法笔记
建议先过一遍:今天是二叉树~-CSDN博客,very重要!
然后再过一遍(理解怎么应用方法):保研机试之[三道二叉树习题,思路为主]-CSDN博客
然后再过一遍(了解后序思路) :保研机试之【构造二叉树】-CSDN博客
来到今天的小剧场:297. 二叉树的序列化与反序列化 - 力扣(LeetCode)
序列化是指将一棵二叉树转变为一个序列(节点值+空指针表示(#)),我们又可以通过该序列转变回二叉树
中序遍历特殊情况:
我们用前序遍历和层次遍历的思路来解决这道题:
前序遍历:(也不算难吧,就是有很多细节要处理)
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Codec {
public:string res="";void ser(TreeNode* root){if(root==nullptr){res+="#,";return;}//前res+=to_string(root->val);res+=",";ser(root->left);//中ser(root->right);//后}// Encodes a tree to a single string.string serialize(TreeNode* root) {ser(root);cout<<res<<endl;return res;}vector<string> temp;void deal(string data){stringstream ss(data);string item;while(getline(ss,item,',')){temp.push_back(item);}}int cnt=0;TreeNode* des(int len){//前if(temp[cnt]=="#"){cnt++;return nullptr;}TreeNode* node=new TreeNode;node->val=stoi(temp[cnt++]);TreeNode* left=des(len);//中TreeNode* right=des(len);//后node->left=left;node->right=right;return node;}// Decodes your encoded data to tree.TreeNode* deserialize(string data) {deal(data);int len=temp.size();TreeNode* result=des(len);return result;}
};// Your Codec object will be instantiated and called as such:
// Codec ser, deser;
// TreeNode* ans = deser.deserialize(ser.serialize(root));
层次遍历: 明天续更,干饭去了,家人们
这篇关于保研机试之【二叉树序列化】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!