#include <fstream>
#include <vector>
#include <iterator>
#include <iostream>
#include <string>
using namespace std;
ifstream fin("1.inp");
class TreeNode {
private:
friend class Tree;
int Keyvalue;
string Namevalue;
TreeNode *LeftChild;
TreeNode *RightChild;
TreeNode() { LeftChild = RightChild = 0; };
TreeNode(int _Keyvalue, string _Namevalue, TreeNode *Lefty, TreeNode *Righty) {
Keyvalue = _Keyvalue;
Namevalue = _Namevalue;
LeftChild = Lefty;
RightChild = Righty;
}
};
class Tree {
private:
TreeNode *root;
void insert_to_tree(TreeNode *, int, string);
void show_tree(TreeNode *);
public:
Tree() { root = 0; }
void insert_to_tree(int, string);
void delete_from_tree(int);
void show_tree();
void setup();
};
void Tree::insert_to_tree(int _Keyvalue, string _Namevalue){
insert_to_tree(root, _Keyvalue, _Namevalue);
}
//this is problem.
void Tree::insert_to_tree(TreeNode *CurrentNode, int _Keyvalue, string _Namevalue){
if (CurrentNode == 0)
CurrentNode = new TreeNode(_Keyvalue, _Namevalue, 0, 0);
else{
if (CurrentNode->Keyvalue < _Keyvalue)
insert_to_tree(CurrentNode->RightChild, _Keyvalue, _Namevalue);
else if (CurrentNode->Keyvalue == _Keyvalue)
CurrentNode->Namevalue = _Namevalue;
else
insert_to_tree(CurrentNode->LeftChild, _Keyvalue, _Namevalue);
}
}
void Tree::delete_from_tree(int _Keyvalue){
}
void Tree::show_tree(){
show_tree(root);
}
void Tree::show_tree(TreeNode *CurrentNode){
if (CurrentNode){
if (CurrentNode->LeftChild == 0 && CurrentNode->RightChild == 0){
cout << CurrentNode->Namevalue;
}
else{
show_tree(CurrentNode->LeftChild);
show_tree(CurrentNode->RightChild);
}
}
}
void get_command(Tree &_MyTree){
int Num_of_command;
string command;
fin >> Num_of_command;
for (int i = 0; i < Num_of_command; i++){
fin >> command;
int Keyvalue; string Namevalue;
if (command == "ins"){
fin >> Keyvalue >> Namevalue;
_MyTree.insert_to_tree(Keyvalue, Namevalue);
}
else if (command == "del"){
fin >> Keyvalue;
_MyTree.delete_from_tree(Keyvalue);
}
else if (command == "leaves")
_MyTree.show_tree();
}
}
int main(){
Tree MyTree;
get_command(MyTree);
}
当我调用该函数在C++中,我不知道为什么我的函数没有返回结果
void Tree::insert_to_tree(int _Keyvalue, string _Namevalue){
insert_to_tree(root, _Keyvalue, _Namevalue); }
根本不是我的功能改变。该功能后
void Tree::insert_to_tree(TreeNode *CurrentNode, int _Keyvalue, string _Namevalue)
根始终为0
将函数签名更改为void void :: insert_to_tree(TreeNode *&CurrentNode,int _Keyvalue,string _Namevalue)' –
您可能会考虑更改标题。你的函数是'void',这将是对标题中陈述的问题的简单回答,但我认为这不是你正在寻找的。 – user463035818
我想添加 - 当你创建一个节点时,它不会插入你的树,只是在内存中创建和丢失它。你应该创建类似if的节点(CurrentNode-> RightChild == NULL)CurrentNode-> RightChild = new TreeNode(_Keyvalue,_Namevalue,0,0); –