我是一名大学生,作为我的最后一项任务,我必须创建AVL Tree字典。我试图自己写,我设法写了很多,但我有一个问题。当我使用我的所有getter和setter用于随机节点甚至它们的向量时,它都有效。但是当我在Tree方法中尝试setRoot时,它会失败。我的意思是,它只运行一次,但是一旦我尝试使用root用avl.getRoot调用它或在我的实现中以root身份调用它就失败了。我的程序崩溃了。这是我曾经做过的最艰难的计划。你能解决我的问题并给我一些关于重要内容的提示吗?先感谢您。
Main.cpp - 测试
Node n1("clown",1);
Node n2("cat",1);
Node n3("kid",1);
Node n4("wasp",1);
n1.setLSon(&n2);
std::cout<<"ENG: "<<n1.getLSon().getWord().getEng()<<std::endl;
n1.setRSon(&n3);
std::cout<<"ENG: "<<n1.getRSon().getWord().getEng()<<std::endl;
n1.setParent(&n4);
std::cout<<"ENG: "<<n1.getParent().getWord().getEng()<<std::endl;
if(n2.hasLSon)
n2.getLSon();
else
std::cout<<"n2 does not have a left son"<<std::endl;
AVL_Tree avl;
avl.addNode("cirrus",1);
avl.addNode("monkey",1);
std::cout<<"ENG: "<<avl.branches[0].getWord().getEng()<<std::endl;
std::cout<<"ENG: "<<avl.branches[1].getWord().getEng()<<std::endl;
avl.branches[0].setLSon(&avl.branches[1]);
std::cout<<"ENG: "<<avl.branches[0].getLSon().getWord().getEng()<<std::endl;
avl.branches[1].setParent(&avl.branches[0]);
std::cout<<"ENG: "<<avl.branches[1].getParent().getWord().getEng()<<std::endl;
/*Error is being called here*/
**std::cout<<"ROOT: "<<avl.getRoot().getWord().getEng()<<std::endl;**
}
树类:有问题的功能
AVL_Tree::AVL_Tree()
{
root=NULL;
}
void AVL_Tree::sort()
{
}
Node AVL_Tree::getRoot()
{
return *root;
}
void AVL_Tree::addNode(std::string eng,int count)
{
int i=0;
branches.push_back(Node(eng,count));
for(i;i<branches.size();i++)
{
if(branches[i].getWord().getEng()==eng)
break;
}
if(branches.size()==1)
{
root=&(branches[i]);
std::cout<<"ROOT DODANY"<<endl;
std::cout<<root->getWord().getEng()<<std::endl;
}
else
std::cout<<"ROOTEM JEST: "<<root->getWord().getEng()<<std::endl;
if(!isBinary());
sort();
}
树类
class AVL_Tree
{
public:
AVL_Tree();
void sort();
void addNode(std::string eng,int count);
void deleteNode(std::string eng);
Node findNode(std::string eng);
Node getRoot();
bool isBinary();
bool isNode(std::string eng);
std::vector<Node> branches;
private:
Node *root;
int leftFactor;
int rightFactor;
};
Node.cpp
Node::Node(std::string eng,int count):word(eng,count)
{
parent=NULL;
l_son=NULL;
r_son=NULL;
hasLSon=false;
hasRSon=false;
}
Node::~Node()
{
parent=NULL;
l_son=NULL;
r_son=NULL;
}
Word Node::getWord()
{
return word;
}
Node Node::getLSon()
{
return *l_son;
}
Node Node::getRSon()
{
return *r_son;
}
Node Node::getParent()
{
return *parent;
}
void Node::setLSon(Node *n)
{
l_son=n;
hasLSon=true;
}
void Node::setRSon(Node *n)
{
r_son=n;
hasRSon=true;
}
void Node::setParent(Node *n)
{
parent=n;
}
Node.h
class Node
{
public:
Node(std::string eng,int count);
~Node();
Word getWord();
Node getLSon();
Node getRSon();
Node getParent();
void setLSon(Node *node);
void setRSon(Node *node);
void setParent(Node *node);
bool hasLSon;
bool hasRSon;
private:
Node *parent;
Node *l_son;
Node *r_son;
Word word;
};
答案 0 :(得分:0)
在var repList = $("#reportingList").jqGrid ('getDataIDs');
var appFin = 0;
$.each(repList, function(i,v){
var repListData = $("#reportingList").jqGrid('getRowData', v);
var repApp = repListData.type;
if (repApp == "Approval"){
appFin++;
};
});
if (appFin >= 5) {
$("#btnApprovalCon").button("option", "disabled", true);
var shouldDel = $("#reportingList").jqGrid('getDataIDs');
var newShould = [];
for (var ii=(shouldDel.length-1); ii>4; ii--){
var dd = shouldDel[ii];
newShould = [dd];
$("#reportingList").jqGrid('delRowData', newShould);
};
};
中,您指定了addNode
到branches
元素的指针。稍后调用root
将添加一个新分支,重新分配向量的内存,并使addNode
指针无效。当您尝试使用此无效指针时,这会导致以后崩溃。
在addNode末尾的if语句之后你还有一个分号,我不认为你想要在那里。编译所有打开的警告,以便收到有关此类事件的通知。