- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我能够从文本文件中检索所有单词并将它们放在树中,只要在树中找到数据,我就无法将出现的次数增加一个。
现在每个单词显示一次,但出现1,不会增加。
这是我的类(class)节点
class Node{
private:
Node *left; //left child
Node *right; //right child
std::string num;
public:
int data; //number
Node(); //constructor
void setData(string num, int data); //sets number in node
string getData(); //return numbers from node
int getOcc();
void setLeft(Node *l); //sets left child pointer
Node* getLeft(); //returns left child pointer
void setRight(Node *r); //sets right child pointer
Node* getRight(); //return right child pointer
};
Node::Node(){
this->left = NULL;
this->right = NULL;
}
void Node::setData(string num, int data){
this->num = num;
this->data = data;
}
string Node::getData(){
return this->num;
}
int Node::getOcc(){
return this->data;
}
void Node::setLeft(Node *l){
this->left = l;
}
Node* Node::getLeft(){
return this->left;
}
void Node::setRight(Node *r){
this->right = r;
}
Node* Node::getRight(){
return this->right;
}
这是我类的BST
class BST{
private:
Node * root; //root node pointer
public:
BST(); //constructor
~BST(); //destructor
void Insert(string num, int data); //Inserts new number in tree
bool find(string num); //finds whether a number is present in tree
void min(); //find and print minimum number in the tree
void max(); //find and print maximum number in the tree
void save_file(string filename); //save the tree to file
void Delete(string num); //deletes a number from tree
void LoadFromFile(string filename); //loads numbers from file to tree
void Print(); //print tree to stdout
//private functions used as helper functions in the public operations
private:
void printHelper(Node *root);
bool findHelper(Node *root,string num);
void InsertHelper(Node* current, Node* newnode);
void findMinHelper(Node* current);
void findMaxHelper(Node * current);
void saveHelper(ofstream &fout, Node* current);
Node* DeleteHelper(Node *current, string num);
Node * findMaximum(Node * n);
void clear(Node *currnt);
};
BST::BST(){
this->root = NULL; //root is NULL in the start
}
BST::~BST(){
clear(root); //delete all nodes
}
void BST::clear(Node* current){
if(current == NULL)
return;
clear(current->getLeft()); //clear left subtree
clear(current->getRight()); //clear right subtree
delete current; //delete this node
}
void BST::Insert(string num, int data){
//create new node to be inserted
Node *n = new Node();
n->setData(num, data);
n->setLeft(NULL);
n->setRight(NULL);
if(this->root == NULL) //if root is null, simply add at root
root = n;
////////// IN HERE, I TRIED TO INCREMENT INCREMENTATION THE OCCURENCE BY 1
else if (find(n->getData()) == true){
int h = n->getOcc();
h++;
n->setData(num, h);
}
else
InsertHelper(root,n); //call helper to insert
}
void BST::InsertHelper(Node* current, Node* newnode){
if(current == NULL)
return;
//node should be inserted at right subtree
if(current->getData() <= newnode->getData()){
//if no node at right
if(current->getRight() == NULL )
current->setRight(newnode); //add at right node
else
InsertHelper(current->getRight(), newnode); //insert in right subtree
}
else{
if(current->getLeft() == NULL){ //if no node at left
current->setLeft(newnode); //add at left
}else{
InsertHelper(current->getLeft(), newnode); //insert in left subtree
}
}
}
bool BST::find(string num){
return findHelper(root,num);
}
bool BST::findHelper(Node *current,string num){
if(current == NULL)
return false;
if(current->getData() == num) //if number is found
return true;
if(num < current->getData()) //if number is less than current node
return findHelper(current->getLeft(),num); //go to left tree
else
return findHelper(current->getRight(),num); //go to right tree
}
void BST::min(){
findMinHelper(root);
}
void BST::findMinHelper(Node* current){
if(current == NULL)
return;
if(current->getLeft() == NULL) //if no node at right
cout<<current->getData(); //current has min data
else
findMinHelper(current->getLeft()); //check on left subtree
}
void BST::max(){
findMaxHelper(root);
}
void BST::findMaxHelper(Node * current){
if(current == NULL)
return;
if(current->getRight() == NULL) //if no node at right
cout<<current->getData(); //current node has max data
else
findMaxHelper(current->getRight()); //check on right subtree
}
void BST::Print(){
printHelper(root);
}
void BST::printHelper(Node *current){
if(current == NULL) //stop if NULL
return;
printHelper(current->getLeft()); //print left tree
cout<<current->getData() << " " << current->getOcc() << " "; //print current node data
printHelper(current->getRight()); //print right tree
}
void BST::Delete(string num){
root = DeleteHelper(root,num);
}
Node* BST::DeleteHelper(Node *current, string num){
if(current == NULL)
return NULL;
Node *tobeReturned;
if (current->getData() == num) { //if key is found
if (current->getLeft() == NULL) { //no node at left
tobeReturned = current->getRight();
delete current;
return tobeReturned; //right subtree should replace this node
} else if (current->getRight() == NULL) {
tobeReturned = current->getLeft();
delete current;
return tobeReturned;
} else {
//find maximum node in the left subtree
Node * maxnode = findMaximum(current->getLeft());
//copy values from max node to this node
// current->setData(maxnode->getData());
//delete the max node
current->setLeft(DeleteHelper(current->getLeft(), num));
}
cout<<"Deleted!!!";
} else { //not found
if (num < current->getData()) {
current->setLeft(DeleteHelper(current->getLeft(),num));
} else {
current->setRight(DeleteHelper(current->getRight(), num));
}
}
return current;
}
Node* BST::findMaximum(Node * n){
if(n->getRight() == NULL) //if no node at right, current is maximum
return n;
return findMaximum(n->getRight()); //find in right subtree
}
在我的主要语言中,我使用出现次数为= 1的循环逐个插入单词
tree.Insert(s,1);
,但最终结果始终是每个单词的出现次数= 1
最佳答案
当具有指定数据的节点在二进制树中已经存在时,成员函数Insert
会发生内存泄漏,因为在此代码段中
else if (find(n->getData()) == true){
int h = n->getOcc();
h++;
n->setData(num, h);
}
它没有被释放。而且,成员函数
setData
应用于此新创建的节点,该节点与二叉树的现有节点没有任何共同点。
InsertHelper
可以通过以下方式重写
void BST::Insert(string num, int data)
{
InsertHelper( root, num, data ); //call helper to insert
}
和
void BST::InsertHelper( Node * ¤t, string num, int data )
{
if ( current == nullptr )
{
// create new node to be inserted
current = new Node();
current->setData( num, data );
current->setLeft( nullptr );
current->setRight( nullptr );
}
else if ( num < current->getData() )
{
InsertHelper( current.getLeft(), num, data );
}
else if ( current->getData() < num )
{
InsertHelper( current.getRight(), num, data );
}
else
{
int h = current->getOcc();
h++;
current->setData(num, h);
}
}
为了使功能起作用,这两个功能也要改变
Node * & getLeft();
Node * & Node::getLeft(){
return this->left;
}
和
Node * & Node::getRight();
Node * & Node::getRight(){
return this->right;
}
关于c++ - 每当我找到 key 时如何增加值? BST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63043741/
查看“mysqldump -d”并看到一个键是 KEY,而不是“PRIMARY KEY”或“FOREIGN KEY” 什么是关键? 示例: CREATE TABLE IF NOT EXISTS `TA
在我开始使用 Python 的过程中尝试找出最佳编码实践。我用 Pandas 写了一个 csv 到数据框阅读器。它使用格式: dataframe = read_csv(csv_input, useco
在 Flutter 中,用一个例子可以清楚地解释什么? 我的困惑是关于 key,如下面的代码所示。 MyHomepage({Key key, this.title}) : super(key: key
我在我的 Android 应用程序中使用 GCM。要使用 GCM 服务,我们需要创建 Google API key 。因此,我为 android、服务器和浏览器 key 创建了 API key 。似乎
我想在 azure key 保管库中创建一个 secret ,该 key 将具有多个 key (例如 JSON)。 例如- { "storageAccountKey":"XXXXX", "Co
尝试通过带有 encodeforURL() 的 url 发送 key 时,我不断收到错误消息和 decodefromUrl() .代码示例如下。 这是我的入口页面: key = generateSec
是否有检查雪花变体字段中是否存在键的函数? 最佳答案 您可以使用 IS_NULL_VALUE 来查看 key 是否存在。如果键不存在,则结果将为 NULL。如果键存在,如果值为 JSON null,则
我正在尝试运行此命令: sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A 但我收到一个错误: Execu
我有一个 csv 文件,我正在尝试对 row[3] 进行计数,然后将其与 row[0] 连接 row[0] row[3] 'A01' 'a' 'B02'
如何编写具有这种形式的函数: A(key, B(key, C(key, ValFactory(key)))) 其中 A、B 和 C 具有此签名: TResult GetOrAdd(string key
审查 this method我很好奇为什么它使用 Object.keys(this).map(key => (this as any)[key])? 只调用 Object.keys(this).ind
我有一个奇怪的情况。我有一个字典,self.containing_dict。使用调试器,我看到了字典的内容,并且可以看到 self 是其中的一个键。但是看看这个: >>> self in self.c
我需要在我的 Google Apps 脚本中使用 RSA-SHA256 和公钥签署消息。 我正在尝试使用 Utilities.computeRsaSha256Signature(value, key)
我是 React 的初学者开发人员,几天前我看到了一些我不理解的有趣语法。 View组件上有{...{key}},我会写成 key={key} ,它完全一样吗?你有链接或解释吗? render()
代理 key 、合成 key 和人工 key 之间有什么区别吗? 我不清楚确切的区别。 最佳答案 代理键、合成键和人工键是同义词。技术关键是另一个。它们都表示“没有商业意义的主键”。它们不同于具有超出
问题陈述:在 Web/控制台 C# 应用程序中以编程方式检索并使用存储在 Azure Key Vault 中的敏感值(例如数据库连接字符串)。 据我所知,您可以在 AAD 中注册应用,并使用其客户端
问题陈述:在 Web/控制台 C# 应用程序中以编程方式检索并使用存储在 Azure Key Vault 中的敏感值(例如数据库连接字符串)。 据我所知,您可以在 AAD 中注册应用,并使用其客户端
我正在寻找 Perl 警告的解决方案 “引用键是实验性的” 我从这样的代码中得到这个: foreach my $f (keys($normal{$nuc}{$e})) {#x, y, and z 我在
我正在为 HSM 实现 JCE 提供程序 JCE中有没有机制指定 key 生成类型例如: session key 或永久 key KeyGenerator keygen = KeyGener
我在 Facebook 上创建了一个应用程序。我已经正确添加了 keyhash 并且应用程序运行良好但是当我今天来并尝试再次运行它时它给了我这个错误。 这已经是第二次了。 Previsouly 当我收
我是一名优秀的程序员,十分优秀!