//Node.cpp
Node::Node(DataType Item):item(Item)
{
lchild = 0;
rchild = 0;
}
DataType Node::getItem()
{
DataType anItem = item;
return anItem;
}
void Node::setItem(const DataType & data)
{
item = data;
}
Node* Node::getLChild() const
{
Node * p = lchild;
return p;
}
void Node::setLChild(Node * p)
{
lchild = p;
}
Node* Node::getRChild() const
{
Node * p = rchild;
return p;
}
void Node::setRChild(Node * p)
{
rchild = p;
}
Node::~Node()
{
}
//BST.cpp
DataType * BST::Search(const string name)
{
return Search(name, root);
}
DataType * BST::Search(const string name, Node * r)
{
if(r != 0)
{
if (name.compare(r->getItem().getname()) == 0)
return &(r->getItem());
else
{
if (name.compare(r->getItem().getname()) < 0)
return Search(name, r->getLChild());
else
return Search(name, r->getRChild());
}
}
else
return NULL;
}
//main.cpp
MyClass mc1("Tree","This is a tree");
MyClass mc2("Book","This is a book");
MyClass mc3("Zoo","This is a zoo");
BST tree;
tree.Insert(mc1);
tree.Insert(mc2);
tree.Insert(mc3);
MyClass * mc = tree.Search("Book");
if (mc != NULL)
cout << mc->getname() << endl;
검색 기능에서 반환 된 MyClass 개체 (mc)에 문제가 있습니다.이진 검색 트리 - 검색 함수 반환 개체
Search()로 추적하고 "r-> getItem()"이 원하는 것을 얻는 지 확인하십시오.
"& (r-> getItem()); return" ?
감사합니다. ++++++
나는 조금 혼란 스러워요 .. 내가 변경할 수 있습니다에 "데이터 형식 BST :: 검색 (const를 문자열 이름)"대신 "데이터 형식 * BST :: 검색의 (const string name) ".... 컴파일러가 통과 할 수없는 것 같습니다.
'노드 ::의 getItem()'무엇을 반환하지? – juanchopanza
getItem()이 MyClass (MyClass가 아닌)를 반환하면 "return & (r-> getItem());" 주소에 액세스 할 때 소멸되는 임시 객체에 주소를 반환합니다. 다른 반환 값은 컴파일러에 의해 차단되어야합니다. – stefaanv