problemscpp
A collection of my answers to algorithm problems in c++.
函数
acwing::acwing18 命名空间参考

函数

TreeNodebuildTree (vector< int > &preorder, vector< int > &inorder)
 
TreeNoderebuild (vector< int > &inorder, int in_begin, int in_end, vector< int > &preorder, int pre_begin, int pre_end)
 

函数说明

◆ buildTree()

TreeNode * acwing::acwing18::buildTree ( vector< int > &  preorder,
vector< int > &  inorder 
)

在文件 acwing408.cpp426 行定义.

426 {
427 if(preorder.empty() || inorder.empty()) {
428 return nullptr;
429 }
430 return rebuild(inorder, 0, inorder.size() - 1, preorder, 0, preorder.size() - 1);
431 }
TreeNode * rebuild(vector< int > &inorder, int in_begin, int in_end, vector< int > &preorder, int pre_begin, int pre_end)
Definition: acwing408.cpp:394

引用了 rebuild().

◆ rebuild()

TreeNode * acwing::acwing18::rebuild ( vector< int > &  inorder,
int  in_begin,
int  in_end,
vector< int > &  preorder,
int  pre_begin,
int  pre_end 
)

在文件 acwing408.cpp394 行定义.

394 {
395 if(in_begin == in_end) {
396 return new TreeNode(inorder[in_begin]);
397 }
398 TreeNode *root = new TreeNode(preorder[pre_begin]);
399
400 int left_in_cursor = in_begin;
401 int left_pre_cursor = pre_begin + 1;
402
403 if(inorder[in_begin] == preorder[pre_begin]) {
404 root->left = nullptr;
405 } else {
406 unordered_set<int> left = unordered_set<int>();
407 while(inorder[left_in_cursor] != preorder[pre_begin]) {
408 left.insert(inorder[left_in_cursor]);
409 left_in_cursor++;
410 }
411 while(left.find(preorder[left_pre_cursor]) != left.end()) {
412 left_pre_cursor++;
413 }
414 root->left = rebuild(inorder, in_begin, left_in_cursor - 1, preorder, pre_begin + 1, left_pre_cursor - 1);
415 }
416
417 if(inorder[in_end] == preorder[pre_begin]) {
418 root->right = nullptr;
419 } else {
420 root->right = rebuild(inorder, left_in_cursor + 1, in_end, preorder, left_pre_cursor, pre_end);
421 }
422
423 return root;
424 }
TreeNode * right
Definition: acwing408.h:24
TreeNode * left
Definition: acwing408.h:23

引用了 acwing::acwing1929::left, acwing::TreeNode::left, rebuild(), acwing::TreeNode::right , 以及 acwing::acwing3786::root.

被这些函数引用 buildTree() , 以及 rebuild().