2014-06-24 1 views
-1

이진 트리에서 주어진 노드 포인터를 삭제하고 싶지만 그 중 하나의 포인터로 왼쪽 노드를 바꾸고 싶습니다. 내가 이렇게 할 경우메모리 누출을 피하기 위해 이진 트리에서 노드 삭제

는 :

Node<T> *tmp = root->getLeftNode(); 
delete root; 
root = tmp; 

포인터 루트는 왼쪽 아이의 값을 갖는하지 끝납니다.

나는 이렇게 할 경우

root = root->getLeftNode(); 

그것은 작동하지만, 이것은 명백한 메모리 누수입니다.

어떻게 루트를 올바르게 삭제할 수 있습니까?

편집 : 메모리 누수 접근 방식을 사용하여 내 removeNode 메서드를 시도하고 작동합니다 (내 코드를 논리적으로 올바른 것). 그것은 내가 루트 포인터가 큰 음수 (유효한 주소가 아님)를 갖게되는 이런 방식으로 삭제를 사용할 때뿐입니다.

+0

"포인터 루트가 왼쪽 자식 값을 갖지 않게됩니다."라는게 무슨 뜻인가요? ? 그러면 그 가치는 무엇입니까? 과제가 명확하기 때문에 여기서 문제가 보이지 않습니다 ... – Unda

+0

루트 포인터의 값은 큰 음수로 끝납니다. -123483978349와 같은 것입니다. – Kami

+0

그러나'struct' 또는'class'에 대한 포인터 인 경우 이것은 포인터 값일 것입니다.'root'가 가리키는'struct'의 내용을 출력하고'root' 자체는 출력하지 않으면 안됩니다. 'Node '데이터 구조를 게시하십시오. – Unda

답변

-1

답변이 정확해야하지만 조금 더 많은 정보를 게시해야합니다. 왼쪽 자식의 값을 루트에 저장하려고합니까, 아니면 루트 노드에 대한 포인터입니까? 왼쪽 아이의 가치를 얻으려고한다면 다음을 사용하십시오.

root = *tmp;