-1
이진 트리에서 주어진 노드 포인터를 삭제하고 싶지만 그 중 하나의 포인터로 왼쪽 노드를 바꾸고 싶습니다. 내가 이렇게 할 경우메모리 누출을 피하기 위해 이진 트리에서 노드 삭제
는 :
Node<T> *tmp = root->getLeftNode();
delete root;
root = tmp;
포인터 루트는 왼쪽 아이의 값을 갖는하지 끝납니다.
나는 이렇게 할 경우
root = root->getLeftNode();
그것은 작동하지만, 이것은 명백한 메모리 누수입니다.
어떻게 루트를 올바르게 삭제할 수 있습니까?
편집 : 메모리 누수 접근 방식을 사용하여 내 removeNode 메서드를 시도하고 작동합니다 (내 코드를 논리적으로 올바른 것). 그것은 내가 루트 포인터가 큰 음수 (유효한 주소가 아님)를 갖게되는 이런 방식으로 삭제를 사용할 때뿐입니다.
"포인터 루트가 왼쪽 자식 값을 갖지 않게됩니다."라는게 무슨 뜻인가요? ? 그러면 그 가치는 무엇입니까? 과제가 명확하기 때문에 여기서 문제가 보이지 않습니다 ... – Unda
루트 포인터의 값은 큰 음수로 끝납니다. -123483978349와 같은 것입니다. – Kami
그러나'struct' 또는'class'에 대한 포인터 인 경우 이것은 포인터 값일 것입니다.'root'가 가리키는'struct'의 내용을 출력하고'root' 자체는 출력하지 않으면 안됩니다. 'Node'데이터 구조를 게시하십시오. –
Unda