MockNcclGroup::DoubleBinaryTreeNode* MockNcclGroup::InterDouBinTreeShift(DoubleBinaryTreeNode* root,std::vector<int>nodes){
std::map<int,DoubleBinaryTreeNode*>node2treenode;
std::map<int,int>rank2index;
std::queue<DoubleBinaryTreeNode*>q;
for(int i =0 ;i<nodes.size();i++) {
node2treenode[nodes[i]] = new DoubleBinaryTreeNode(nodes[i]);
rank2index[nodes[i]] = i;
}
q.push(root);
while (!q.empty())
{
DoubleBinaryTreeNode* current = q.front();
q.pop();
int node = current->node;
int nodeshift = nodes[(rank2index[node] + 1) % nodes.size()];
DoubleBinaryTreeNode* currentshift = node2treenode[nodeshift];
if(current->left != nullptr) {
int leftnode = current->left->node;
int leftnodeshift = nodes[(rank2index[leftnode] + 1) % nodes.size()];
currentshift->left = node2treenode[leftnodeshift];
q.push(current->left);
}
if(current->right != nullptr) {
int rightnode = current->right->node;
int rightnodeshift = nodes[(rank2index[rightnode] + 1) % nodes.size()];
currentshift->right = node2treenode[rightnodeshift];
q.push(current->right);
}
}
return node2treenode[(nodes[rank2index[root->node]+1]) % nodes.size()];
有一个函数是这样的,返回语句的括号似乎写错位置了吧?
应该是这样对吗?
return node2treenode[nodes[(rank2index[root->node] + 1) % nodes.size()]];
有一个函数是这样的,返回语句的括号似乎写错位置了吧?
应该是这样对吗?
return node2treenode[nodes[(rank2index[root->node] + 1) % nodes.size()]];