[c#] .NET에 Tree <T> 클래스가없는 이유는 무엇입니까?

.NET의 기본 클래스 라이브러리에는 컬렉션 (List, Queue, Stack, Dictionary)에 대한 우수한 데이터 구조가 있지만 이상하게도 바이너리 트리에 대한 데이터 구조는 포함되어 있지 않습니다. 이것은 다른 순회 경로를 이용하는 것과 같은 특정 알고리즘에 매우 유용한 구조입니다. 올바르게 작성된 무료 구현을 찾고 있습니다.

나는 단순히 눈이 멀고 그것을 찾지 못하는 것입니까 … BCL 어딘가에 묻혀 있습니까? 그렇지 않다면 누군가 바이너리 트리 용 무료 또는 오픈 소스 C # /. NET 라이브러리를 추천 할 수 있습니까? 제네릭을 사용하는 것이 바람직합니다.

편집 : 내가 찾고있는 것을 명확히하기 위해. 내부적으로 트리를 사용하는 정렬 된 사전 컬렉션에는 관심이 없습니다. 저는 실제로 이진 트리에 관심이 있습니다. 구조를 노출하여 하위 트리 추출과 같은 작업을 수행하거나 노드에서 수정 후 순회를 수행 할 수 있습니다. 이상적으로 이러한 클래스는 특수 트리의 동작을 제공하도록 확장 될 수 있습니다 (예 : Red / Black, AVL, Balanced 등).



답변

당신 말이 맞아요, BCL에는 아무것도 없습니다. 나는 이것이 트리를 사용할지 여부를 선택하는 것이 일반적으로 구현 세부 사항이고 그렇지 않으면 데이터에 액세스하는 비 전통적인 방법이기 때문이라고 생각합니다. 즉, “binary-search-for element # 37″이라고 말하지 않습니다. 대신 “요소 # 37 가져 오기”라고 말합니다.

하지만 C5보셨습니까 ? 매우 편리하며 여러 트리 구현 ( 1 , 2 , 3 )이 있습니다.


답변

직접 정의 할 수 있습니다.

public class MyTree<K, V> : Dictionary<K, MyTree<K, V>>
{
    public V Value { get; set; }
}

또는 키 없음 :

public class MyTree<V> : HashSet<MyTree<V>>
{
    public V Value { get; set; }
}


답변

그러한 구현에서 원하는 것은 무엇입니까?

이진 트리? 레드 블랙? 기수 나무? B- 트리? R- 트리? R *-트리?

트리는 데이터 구조 라기보다 패턴이며 성능이 중요한 곳에서 사용되는 경향이 있습니다 (따라서 구현 세부 사항도 중요 할 것입니다). BCL에 어떤 종류의 트리 클래스가 포함되어 있다면 어쨌든 자신의 것을 롤링하면됩니다.


답변

나는 그것을 믿는다 SortedDictionary log (n) 삽입으로 Tree Data Stucture에서 기대할 수있는 검색 특성을 .

http://msdn.microsoft.com/en-us/library/f7fta44c(VS.80).aspx


답변

SortedSet<T>이진 검색 트리 ref 로 구현됩니다 .SortedDictionary<TKey, TValue>내부적으로 사용 SortedSet<T>하므로 이진 검색 트리 ref 입니다.


답변

아니요, Tree<T>BCL에는 ” -like”유형 이 없지만 (항상 저를 당황하게하는 것) 여기에 좋은 기사가 있습니다. 에 C #에서 직접 구현하는 방법을 안내 가 있습니다.

.NET이 일반적으로 사용되는 응용 프로그램 (비즈니스 응용 프로그램, 데이터 이동 응용 프로그램 등)에서 트리 기반 데이터 구조가 덜 일반적으로 사용된다는 주장을 할 수있을 것 같습니다. 그래도 동의합니다. BCL이 전혀 구현되지 않은 것이 이상합니다.


답변

이 일련의 기사는 특히 파트 3과 4를 직접 작성해야 할 때 도움이되었습니다.

데이터 구조에 대한 광범위한 조사