力扣 二叉树“TreeNode” 检测用程序
C++代码如下
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
TreeNode() :val(0), left(nullptr), right(nullptr) {}
TreeNode(int _X) :val(_X), left(nullptr), right(nullptr) {}
TreeNode(int _X, TreeNode* R) :val(_X), left(nullptr), right(R) {}
TreeNode(int _X, TreeNode* L, TreeNode* R) :val(_X), left(L), right(R) {}
};
inline int getInt(string _X) {
stringstream SStmp(_X);
int tmp;
SStmp >> tmp;
return tmp;
}
TreeNode* goIntoTree(TreeNode* root, vector<string> Vtmp, int site) {
if (Vtmp[site - 1] == "null") return nullptr;
root->val = getInt(Vtmp[site - 1]);
site = (site << 1) - 1;
if (site < Vtmp.size() && Vtmp[site] != "null") {
root->left = new TreeNode();
root->left = goIntoTree(root->left, Vtmp, site + 1);
}
++site;
if (site < Vtmp.size() && Vtmp[site] != "null") {
root->right = new TreeNode();
root->right = goIntoTree(root->right, Vtmp, site + 1);
}
return root;
}
//待测试的代码写入区域
int main() {
TreeNode valTree, * TreePtr = &valTree;
string Stmp;
vector<string> Vtmp;
//输入待测试的树序列,需要带']'
cin >> Stmp;
for (int r = Stmp.find(','); r != -1;) {
Stmp[r] = ' ';
++r;
r = Stmp.find(',', r);
}
stringstream SStmp(Stmp);
while (SStmp >> Stmp) {
if (Stmp.front() == '[') Stmp = Stmp.substr(1);
if (Stmp.back() == ']') Stmp.pop_back();
Vtmp.push_back(Stmp);
}
goIntoTree(TreePtr, Vtmp, 1);
//这个地方已经完成TreeNode的初始化
//输出语句区。
return 0;
}