[英]C++ Binary Tree
我目前正在使用C ++开发一个项目,该项目要求我将文本文件中的字母存储在二叉树中。 我应该遍历字符串并将字母与字母出现的次数一起存储在树中。 我不确定如何编写插入函数,以便它存储字母和整数。 到目前为止,这是我要在树中存储单个值的内容。
void BinaryTree::insert(TreeNode *&nodePtr, TreeNode *&newNode)
{
if (nodePtr == NULL)
nodePtr = newNode;
else if (newNode->value < nodePtr->value)
insert(nodePtr->left, newNode);
else
insert(nodePtr->right, newNode);
}
void BinaryTree::insertNode(int num)
{
TreeNode *newNode = NULL;
newNode = new TreeNode;
newNode->value = num;
newNode->left = newNode->right = NULL;
insert(root, newNode);
}
这是程序的类:
class BinaryTree
{
private:
struct TreeNode
{
int value;
TreeNode *left;
TreeNode *right;
};
TreeNode *root;
void insert(TreeNode *&, TreeNode *&);
public:
BinaryTree()
{
root = NULL;
}
void insertNode(int);
};
和int main:
int main()
{
string filename;
string filedata;
BinaryTree tree;
fstream file;
cout << "Please enter a filename: ";
cin >> filename;
file.open(filename.c_str(), ios::in);
if (file)
{
while (file)
{
file >> filedata;
//tree.insertNode(filedata, );
}
file.close();
}
else
{
cout << "ERROR: Cannot open file.";
}
return 0;
}
我假设我需要向insertNode函数添加一个字符串元素,但是我不确定如何将这两个值一起存储在树中。
谢谢你的帮助。
您只需要将结构TreeNode
的结构更改为::
struct TreeNode
{
char value; // to store the char value of string
int count; // number of times the character has occured
TreeNode *left;
TreeNode *right;
};
从您打算使用BST的代码中看来(如果节点的值小于根值,则转到左侧;如果值大于根值,则转到左侧),在这种情况下, insertNode
和insert
函数完全错误。
您首先应使用所考虑的字符遍历树,如果已经有一个特定值的节点,则增加其计数,如果您击中一个空值,则添加一个新节点。
因此,您的insert
和insertNode
函数应如下所示:
void BinaryTree::insertNode(char value)
{
if(root == NULL) {
root = new TreeNode;
root->value = value;
root->count = 1;
root->left = root->right = NULL;
} else {
if(root->value > value)
insert(root->left, root, value);
else
insert(root->right, root, value);
}
}
void BinaryTree::insert(TreeNode *current, TreeNode *parent, char value)
{
if (current == NULL) {
TreeNode *newNode = new TreeNode;
newNode->value = value;
newNode->count = 1;
newNode->left = newNode->right = NULL;
if(parent->value > newNode->value)
parent->left = newNode;
else
parent->right = newNode;
}
else if (current->value > value)
insert(current->left, current, value);
else
insert(current->right, current, value);
}
在这里,我正在考虑您要让字符串的第一个字符成为二叉树的根。 我不明白为什么您要为每个角色创建一个新节点。 而且,您也不需要将指针的引用传递给函数,因为您根本没有修改指针。 并且,我将2个变量传递给insert
函数,因为要插入树,您需要引用父指针。 希望这会有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.