자바 이진트리 예제

printTree(노드-왼쪽); printf(“%d”, 노드->데이터); printTree(노드-오른쪽); } SortTreeDemo에서 이진 트리의 노드는 노드를 쉽게 만들 수 있는 간단한 생성자를 포함하여 다음과 같은 정적 중첩 클래스를 사용하여 표현됩니다. 생성된 트리는 다음과 같이 됩니다. 이 문서에서는 Java에서 정렬된 이진 트리와 가장 일반적인 작업을 구현하는 방법을 설명했습니다. 트리: 선형 데이터 구조인 배열, 링크된 목록, 스택 및 큐와 달리 트리는 계층적 데이터 구조입니다. (root=1; root<=numKeys; root++) { 왼쪽 = 카운트트리(루트 – 1); 오른쪽 = countTrees(numKeys – 루트); 전략: 각 값이 루트가 될 수 있다는 점을 고려합니다. 왼쪽 및 오른쪽 하위 트리의 크기를 재귀적으로 찾습니다. */ int countTrees (int numKeys) { * * / void doubleTree (구조형 노드 * 노드) { 구조형 노드 * oldLeft; TreeNode의 왼쪽 및 오른쪽 포인터는 null이거나 TreeNode 형식의 다른 개체를 가리킬 수 있습니다. 다른 노드를 가리키는 노드는 해당 노드의 부모라고 하며 노드가 가리키는 노드를 자식이라고 합니다. 이진 트리에서 자식은 "왼쪽 자식" 또는 "오른쪽 자식"이며 노드는 왼쪽 자식이 없는 경우에도 오른쪽 자식을 가질 수 있습니다. 예를 들어 아래 그림에서 노드 3은 노드 6의 상위 이고 노드 4와 5는 노드 2의 자식입니다. 트리 노드로 구성된 모든 연결된 구조가 이진 트리는 아닙니다. 이진 트리에는 다음 속성이 있어야 합니다. 이 노드를 트리의 루트라고 합니다.

트리의 다른 모든 노드에는 정확히 하나의 부모가 있습니다. 마지막으로 이진 트리에는 루프가 없을 수 있습니다. 즉, 일부 노드에서 시작하여 동일한 노드에 다시 도착하는 포인터 체인을 따르는 것은 불가능합니다. 2. 비어 없는 -> (a!=NULL & b!=NULL) { 반환 (a->데이터 == b->데이터 & sameTree (a->왼쪽, b->왼쪽) & sameTree (a->오른쪽, b->오른쪽)) ); } // 3. 하나는 비어 있습니다, 하나는 -> 거짓 다른 반환 (거짓); } 식 트리에는 두 가지 유형의 노드가 포함되어 있습니다: 숫자와 연산자가 포함된 노드가 포함된 노드입니다. 또한 변수가 포함된 노드와 같이 트리를 더 유용하게 만들기 위해 다른 유형의 노드를 추가할 수 있습니다. Java에서 식 트리로 작업하려면 이러한 다양한 노드를 어떻게 처리할 수 있습니까? 개체 지향 순수주의자에 의해 눈살을 찌푸리는 한 가지 방법은 각 노드 개체에 인스턴스 변수를 포함하여 노드 유형을 기록하는 것입니다. 즉, 리프가 아닌 모든 노드의 정도는 항상 2가 됩니다. n 잎이있는 엄격하게 이진 트리에는 (2n – 1) 노드가 있습니다.

이진 트리: 요소가 최소 2개의 자식이 있는 트리를 이진 트리라고 합니다. 이진 트리의 각 요소에는 2개의 자식만 있을 수 있으므로 일반적으로 왼쪽 및 오른쪽 자식의 이름을 지정합니다. 두 하위 트리 에서 첫 번째 재귀트리(노드-왼쪽); printTree(노드-오른쪽); 문제는 우리가 당신이 당신의 바이너리 트리를 사용하는 것을 모르는 것입니다, 그리고 디자인및 구현 복잡성과 결정의 많은 그에서 유래. 트리맵을 사용할 수 있지만 이진 트리를 사용하는 항목에 따라 다름입니다.