내가 개발 한 AVL tree을 사용하기위한 코드를 게시하고 있습니다. 삽입 방법, avlinsert 방법은 다음과 같습니다. 나는 종이에이 코드를 개발했으나 테스트를 거치지 않았지만 이것이 효과가 있기를 바란다. 논의하고자하는 주된 문제는 코드의 노드를 먼저 살펴 보는 균형 요소입니다. 이 방법으로 아이디어는 내가 묻기를 시도하는 것이 명확해질 것입니다.
AVL 트리에서 노드의 균형 요소를 계산하려면 왼쪽 하위 트리의 높이와 오른쪽 하위 트리의 높이를 찾아야합니다. 그럼 우리는 왼쪽 서브 트리의 높이에서 바로 하위 트리의 높이를 빼기 : balancefactor = leftsubtreeheigh - rightsubtreeheight 내 질문은 : 나는 왼쪽 하위 트리 또는 오른쪽 하위 트리의 높이를 계산하는
정렬되지 않은 컬렉션에서 프로그램 중에 몇 번 빌드하는 큰 AVL Tree이 있습니다 (나중에 항목을 삽입/제거하는 데 사용됩니다). 각 항목에 간단한 삽입을 사용하는 것보다 더 좋은 알고리즘이 있습니까? 컬렉션을 먼저 정렬 한 다음 다르게 빌드하려고 시도하는 것이 더 효율적입니까? 내 응용 프로그램 프로파일 링은이 AVL 건물이 핫스팟 위치임을 알려줍니다
아래 코드는 거의 완벽하게 작동하지만 9, 7의 자식은 왼쪽 자식이 아닌 아래쪽으로 똑바로 매달려 있습니다. 이 문제를 어떻게 해결할 수 있습니까? \usepackage{tikz}
\usepackage{xytree}
\begin{tikzpicture}[level/.style={sibling distance=60mm/#1}]
\node [circ
avl-tree은 중복 키를 지원하지만, binary search tree의 기본 동작에 문제가있어 회전으로 인해 동일한 키가있는 노드가 왼쪽과 오른쪽에있을 수 있습니다. 부모. 는 세 개의 노드를 추가 할 때 예를 들어 키 A를 모든 나무가 이런 일이 될 수있는 회전을하게됩니다 : 그 키 A
/\
A A
그래서 점점 모든 항목이 문제가 될 것입니다
좋아, 이것은 CS 멤버들에 대한 이론 영역에서 또 다른 하나입니다. 90 년대에는 BST를 구현하는 데 상당히 적합했습니다. 내 머리를 절대 쓸 수없는 유일한 방법은 이진 트리 (AVL)의 균형을 맞추는 알고리즘의 복잡성이었습니다. 혹시이 문제에 대해 도움을 주실 수 있습니까?