최근에 나는 C++, 즉 클래스와 포인터로 놀기 시작했습니다. 나는 비슷한 질문을 둘러 보았지만 아무것도 도움이되지 못했다.C++ 바이너리 검색 트리
일부 정보를 문자열 형식 (글자, char *)으로 유지하는 이진 검색 트리 클래스가 있지만 트리에 새 노드를 추가 한 후 정크를 반환하므로 정보를 다시 가져올 수 없습니다.
class Node
{
Node *lNode;
Node *rNode;
char *name;
public:
void setName(char *n) { name = n; }
char *getName() { return name; }
}
class Tree
{
Node *root;
Node *addNode(Node *, Node *);
public:
Tree() { root = NULL };
int addNewNode(Node *);
void print();
};
int Tree::addNewNode(Node *n)
{
root = addNode(root, n);
cout << root->getName() << endl; // this returns the name correctly
}
Node *Tree::addNode(Node *subtree, Node *node)
{
if(subtree== NULL)
{
subtree = node;
}
else if(node->getName() <= subtree->getLeft())
{
subtree->setLeft(addNode(subtree->getLeft(), node));
}
else
{
subtree->setRight(addNode(subtree->getRight(), node));
}
return subtree;
}
void Tree::print()
{
cout << root->getName() << endl; // this does not!
}
그리고이 방법을 호출 할 곳은 다음과 같습니다 :
Tree *myTree = new Tree();
Node *n = new Node();
n->setName(name);
myTree->addNewNode(n);
트리 변수가 외부 컨테이너 클래스의 private 멤버 속성입니다, 그리고 여기에
내 코드는 모습입니다 실제로 그 클래스 외부에서 생성되어 생성자로 전달됩니다. addNewNode 메소드를 호출하면 노드가 트리에 추가되지만 루트에 저장된 노드의 이름을 출력하려고 할 때 정크가 발생합니다. 어딘가에 헤이 와이어 포인터가있는 것 같아요.하지만 내 인생에서 찾을 수는 없어요.도움을 주시면 감사하겠습니다.
'std :: map' 또는'std :: set'을 사용하지 않는 이유는 무엇입니까? –
매개 변수의 이름을 멤버와 동일한 이름으로 지정하지 마십시오. 그런 식으로 실수를 할거야 ... –
그건 내 바보 같았 어. '하위 트리'로 변경되었지만 여전히 동일합니다. – straphe