비 검색 바이너리 트리에서 노드를 삭제하는 방법을 알고 싶습니다.C - 바이너리 트리에서 노드 삭제
e.e. 나는이 이진 트리가있는 경우 :
....0.... ...1.....2... .......3.....4..
을 내가 값이 2
비 검색 바이너리 트리에서 노드를 삭제하는 방법을 알고 싶습니다.C - 바이너리 트리에서 노드 삭제
e.e. 나는이 이진 트리가있는 경우 :
....0.... ...1.....2... .......3.....4..
을 내가 값이 2
을 어디는 (검색 트리 같은) 정렬 된 나무 인 경우 노드를 삭제합니까 싶어, 당신은 것 일반적으로 노드 (예 : 2
)를 제거하고이를 왼쪽 하위 하위 트리 (3
)의 가장 오른쪽 리프 또는 오른쪽 하위 트리 (4
)의 가장 왼쪽 리프로 바꿉니다. 바이너리 검색 트리가 아닌 경우 동일한 작업을 수행 할 수 있습니다. 그것은 물론 당신의 나무의 의미와 구조가 무엇을 대표하는지에 달려 있습니다. 구조에 아무런 의미가없는 경우 삭제하려는 노드를 제거하고 임의의 리프 노드로 대체하십시오.
0부터 3까지의 올바른 하위 항목을 연결하고 3에서 4까지의 오른쪽 자식을 연결하고 2를 해제해야합니까? –
2의 왼쪽 하위 트리를 잊지 마라! 아마도 3 이상을 포함 할 수도 있습니다. 할당을 해제하는 재귀 루틴이있는 경우 2의 자식 포인터에주의하십시오 (노드 2를 해제하기 전에이를 NULL로 설정해야 할 수도 있음). 또 다른 옵션은 현재 3이있는 리프에서 데이터 (3)을 삭제하려는 값 (2)으로 이동 한 다음 리프 노드를 해제하는 것입니다. 교체는 리프 노드에서 이루어져야한다는 것을 기억하십시오. 예를 들어 0을 삭제하려면 2를 선택하지 마십시오. – e0k
스키마를 이해하지 못하고 코드가 어디에 있습니까? – Stargateur