2011-05-08 3 views
0

이것은 매우 간단하지만 양파와 비슷합니다. 저는 제 자신의 객체 클래스에 대한 호기심이 있습니다. 실제로 폼의 구성 요소와 비슷합니다. 그 중 어떤 것도 자식과 부모를 가질 수 있습니다. 맨 위에는 루트 객체가 있습니다. 다른 코드는이 계층 구조를 관리하며 언제든지 지점 또는 잎을 만들거나 삭제하거나 이름을 변경할 수 있습니다. 이 트리 뷰를 여러 개 가질 수있는 방식으로이 계층 구조를 볼 수있는 트리 뷰 (일종의, 아마도 가상의)를 갖고 싶습니다. 각 트리 뷰는 필요할 때 개체 계층 구조에서 자신을 그립니다.오브젝트의 기존 계층 구조를 표시하기 위해 트리 뷰를 표시하는 데 가장 좋은 델파이 알고리즘은 무엇입니까

이미 Delphi의 TTreeView를 사용하는 솔루션이 있지만 '변경됨'플래그가 발생하고 변경된 트리 뷰 분기를 다시 빌드 할 때 계층 구조를 반복하는 데 의존합니다. 이것은 천천히 (나는 1000 개가 넘는 객체를 가질 수 있습니다) 그리고 단일 객체 삽입이나 삭제를 위해 단일 트리 뷰 변경을 관리하는 알고리즘을 원합니다. 이것이 가능한가?

답변

1

확실히 개체를 삽입하거나 삭제하고 필요한 변경 작업을 수행 할 수 있습니다.

예를 들어, 삭제의 경우 삭제 된 개체와 관련된 노드를 찾아 삭제하십시오. 삽입하려면 부모와 연결된 객체를 찾은 다음 올바른 위치에 새 노드를 삽입합니다.

개체 이동과 관련된 노드를 찾기 위해 성능 문제가 발생하면 사전을 사용할 수 있습니다.

가상 트리보기의 경우 트리 구조가 개체 구조를 반영하기 때문에 쉽게 볼 수 있습니다. 변경이 이루어지면 업데이트를 요청하고 모두 자연스럽게 발생합니다.

+0

제 질문은 귀하가 제안한 것을 구현하는 알고리즘에 관한 것입니다. "삭제 된 객체와 관련된 노드 찾기"를 작성한 곳에서는 전체 트리를 걸을 필요가없는 '객체에 노드로'함수를 작성하는 등 빠른 방법으로 트리보기에서 어떻게 수행 할 수 있는지 궁금합니다. –

+1

@Brian 성능상의 이유로 나무를 걷지 않으려면 사전을 사용하십시오. –