For starters, I would like to apologize because I didn t know how to word the title appropriately. Here is the issue that I have. I m having an issue while creating a tree from a file. The file looks like this:
0 1 3 4
0 1 4
0 2 3 3 4
0 2 3 4
我需要创造的树像是这样:
0
/
1 2
/ |
3 4 3
| /
4 3 4
|
4
我用言语解释,在档案的每一行中,我都获得了新的数据集,我应 create树,但如果存在顺序,我就应该遵循这一顺序,直到数据出现中断。
在创造树木时,我使用这种方法来检查是否存在顺序:
void Tree::addNewStack(const string& line) {
istringstream stack(line);
string token;
Node* currentNode = nullptr;
while (stack >> token) {
Node* newNode = new Node(token);
if (root == nullptr) {
root = newNode;
}
else {
// Checking for existing node.
Node* existingNode = nullptr;
currentNode = root;
while (existingNode == nullptr && currentNode != nullptr) {
if (currentNode->left != nullptr && current->left->data == token) {
existingNode = currentNode->left;
}
else if (currentNode->right != nullptr && current->right->data == token) {
existingNode = currentNode->right;
}
// ****
}
// If there is an existingNode move to it, otherwise make a new node.
if (existingNode != nullptr) {
currentNode = existingNode;
currentNode = newNode;
}
else {
currentNode = newNode;
}
}
}
}
我尝试优先放电,然后使用先令的 trav子树,但这似乎更为复杂。
在星号评论的空档中,我可以说明如何通过整整条通道进行搜索。 我需要找到一种途径,更新目前的诺德,以便我通过整个树.。 我用目前的Node = 目前的Node->left,但仅对树的一方进行制衡。 另外,还试图在休息期间进行2次检查,一次检查左边,一次检查右边,但那次检查工作。 任何建议?