标签:c_str else pvc 处理 nod serialize pop class 遍历
class Solution { public: char* Serialize(TreeNode *root) { string res; if(root == NULL) return NULL; queue<TreeNode*> que; TreeNode * tmpNode = NULL; que.push(root); res += tostring(root->val) + " "; while(!que.empty()){ tmpNode = que.front(); que.pop(); if(tmpNode->left != NULL){ que.push(tmpNode->left); res+= tostring(tmpNode->left->val) + " "; }else{ res += "# "; } if(tmpNode->right != NULL){ que.push(tmpNode->right); res+= tostring(tmpNode->right->val) + " "; }else{ res += "# "; } } int len = res.size(); char *ret = new char[len+1]; strcpy(ret, res.c_str()); return ret; } TreeNode* Deserialize(char *str) { int i = 0; if(str == NULL) return NULL; if(str[0] == ‘\0‘) return NULL; int num = pickNum(str, i); queue<TreeNode*> que; TreeNode *ret = new TreeNode(num); TreeNode* tmpNode = NULL; que.push(ret); while(!que.empty()){ tmpNode = que.front(); que.pop(); cout<<"tmpNode->val="<<tmpNode->val<<endl; cout<<"str[i]="<<str[i]<<endl; if(str[i] >= ‘0‘ && str[i] <= ‘9‘){ int lv = pickNum(str, i); //cout<<"lv="<<lv<<endl; tmpNode->left = new TreeNode(lv); que.push(tmpNode->left); }else{ if(str[i] == ‘#‘){ i+=2; } } if(str[i] >= ‘0‘ && str[i] <= ‘9‘){ int rv = pickNum(str, i); //cout<<"rv="<<rv<<endl; tmpNode->right = new TreeNode(rv); que.push(tmpNode->right); }else{ if(str[i] == ‘#‘){ i+=2; } } } return ret; } //打印二叉树的层次结构 vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int> > res; if(pRoot == NULL) return res; queue<TreeNode *> que1, que2; que1.push(pRoot); res.push_back(vector<int>(1, pRoot->val)); TreeNode* tmpNode=NULL; while(!que1.empty() || !que2.empty()){ vector<int>tmpVct; while(!que1.empty()){ tmpNode = que1.front(); que1.pop(); if(tmpNode->left != NULL){ que2.push(tmpNode->left); tmpVct.push_back(tmpNode->left->val); } if(tmpNode->right != NULL){ que2.push(tmpNode->right); tmpVct.push_back(tmpNode->right->val); } } if(tmpVct.size() != 0) res.push_back(tmpVct); tmpVct.clear(); while(!que2.empty()){ tmpNode = que2.front(); que2.pop(); if(tmpNode->left != NULL){ que1.push(tmpNode->left); tmpVct.push_back(tmpNode->left->val); } if(tmpNode->right != NULL){ que1.push(tmpNode->right); tmpVct.push_back(tmpNode->right->val); } } if(tmpVct.size() != 0) res.push_back(tmpVct); } return res; } private: string tostring(int a){ strstream ss; ss<<a; string res; ss>>res; return res; } int pickNum(char *str, int & i){ int res = 0; while(str[i]>=‘0‘ && str[i] <= ‘9‘){ res = res*10 + str[i]-‘0‘; i++; } if(str[i] == ‘ ‘) i++; return res; } };
标签:c_str else pvc 处理 nod serialize pop class 遍历
原文地址:https://www.cnblogs.com/chengsheng/p/10702353.html