이진 트리와 이진 검색 트리의 차이점


답변:


566

이진 트리 : 각 노드에 최대 두 개의 잎이있는 트리

  1
 / \
2   3

이진 검색 트리 :에 사용 검색 . 진 왼쪽의 자녀가 포함 트리 덜 부모 노드가 아닌 값으로 노드를 어디에 올바른 아이 보다 크거나 부모에게 같은 값으로 노드를 포함한다.

  2
 / \
1   3

14
@ pete : 그것은 개념적인 것입니다. 실제로 당신이 실제로 완전히 구속되지 않은 것을 만들 필요는 없습니다. 그러나 이진 힙과 같이 다른 방식으로 특별한 비 검색 이진 트리가 많이 있습니다.
user541686

19
@pete 이진 트리는 반드시 비교 가능한 데이터를 포함 할 필요는 없으며, 많은 (비 검색) 이진 트리는 대수 표현을 분석하는 데 사용되며, 이진 트리는 연산자를 노드 (들) 및 숫자 값으로 배치하여 삽입 표기법 파서를 작성하는 데 완벽합니다 잎으로
JBoy

2
@ JBoy :이 경우 그들은 이진 트리가되지 않습니다. (예를 들어 단항 연산자에는 두 개의 자식이있을 수 없습니다.) 제약이없는 이진 트리의 실제 사용 사례를 생각할 수 없기 때문에 이러한 의견을 제시했습니다.
user541686

2
위대하고 간단합니다. 시각적 인 예를 들어 +1 :
Andrei Konstantinov

@Mehrdad 이진 트리에는 노드 당 하나 또는 두 개의 자식이 있습니다. 식 트리는 완벽한 예입니다. 이진 검색 나무는 또한 단지 요소의 특정 번호로 일어날 수있는 전체로 발생하지 않는 한, 노드 당 하나 또는 두 아이가 있습니다.
Lorne의 후작

56

이진 트리는 두 명의 자녀 (왼쪽 자녀와 오른쪽 자녀)가있는 특수한 형태의 나무입니다. 그것은 단순히 트리 구조의 데이터 표현입니다

이진 검색 트리 (BST) 는 다음과 같은 조건을 따르는 특수 유형의 이진 트리입니다.

  1. 왼쪽 자식 노드가 부모 노드보다 작습니다
  2. 오른쪽 자식 노드가 부모 노드보다 큽니다.

23
이러한 조건으로는 충분하지 않습니다. 왼쪽의 전체 하위 트리에는 부모의 키보다 작은 키가 없어야하며 오른쪽의 전체 하위 트리에는 더 큰 노드가 있어야합니다.
Lorne의 후작

1
@EJP 댓글을 좀 더 정교하게 설명해 주시겠습니까? 하위 트리 전체가 무엇을 의미합니까? 하위 트리의 모든 값이 왼쪽에서 근근보다 작아야한다는 것을 의미합니까? 그리고 모든 값은 오른쪽의 루트 값보다 커야합니까?
Asif Mushtaq

두 번째 링크 다음에 "확인"섹션을 읽으면 명확 해집니다.
Rob

38

이진 트리는 노드로 구성되며 각 노드에는 "왼쪽"포인터, "오른쪽"포인터 및 데이터 요소가 포함됩니다. "루트"포인터는 트리에서 최상위 노드를 가리 킵니다. 왼쪽 및 오른쪽 포인터는 양쪽의 작은 "하위 트리"를 재귀 적으로 가리 킵니다. 널 포인터는 요소가없는 이진 트리 (빈 트리)를 나타냅니다. 공식 재귀 정의는 다음과 같습니다. 이진 트리가 비어 있거나 (널 포인터로 표시됨) 왼쪽 및 오른쪽 포인터 (재귀 정의 앞의)가 각각 이진 트리를 가리키는 단일 노드로 구성됩니다.

이진 검색 트리 (BST) 또는 "순서 이진 트리"는 노드가 순서대로 배열 된 이진 트리 유형입니다. 각 노드에 대해 왼쪽 하위 트리의 모든 요소는 노드 (<)보다 적으며 모든 요소는 오른쪽 하위 트리에서 노드 (>)보다 큽니다.

    5
   / \
  3   6 
 / \   \
1   4   9    

위에 표시된 트리는 이진 검색 트리입니다. "루트"노드는 5이고 왼쪽 하위 트리 노드 (1, 3, 4)는 <5이고 오른쪽 하위 트리 노드 (6, 9)는> 5입니다. 재귀 적으로 각 하위 트리는 이진 검색 트리 제약 조건을 따라야합니다. (1, 3, 4) 하위 트리에서 3은 루트, 1 <3 및 4> 3입니다.

"이진 검색 트리"는 "이진 트리"와는 다른 문제의 정확한 문구를주의하십시오.


@GabrielStaples 트리 구조가 추가되었습니다.
Gaurav Borole

14

위의 모든 사람들이 이진 트리와 이진 검색 트리의 차이점에 대해 설명했듯이 주어진 이진 트리가 이진 검색 트리인지 테스트하는 방법을 추가하고 있습니다.

boolean b = new Sample().isBinarySearchTree(n1, Integer.MIN_VALUE, Integer.MAX_VALUE);
.......
.......
.......
public boolean isBinarySearchTree(TreeNode node, int min, int max)
{

    if(node == null)
    {
        return true;
    }

    boolean left = isBinarySearchTree(node.getLeft(), min, node.getValue());
    boolean right = isBinarySearchTree(node.getRight(), node.getValue(), max);

    return left && right && (node.getValue()<max) && (node.getValue()>=min);

}

그것이 도움이되기를 바랍니다. 여기서 언급 할 가치가 있다고 생각하여 주제에서 벗어나면 죄송합니다.


1
왼쪽 또는 오른쪽 하위 트리가 비어있을 수 있습니다. 코드가 해당 사례를 올바르게 처리하지 못합니다.
Lorne의 후작

11

이진 트리는 두 개의 자식 참조 가질 수 있는 노드 로 구성된 데이터 구조 를 나타냅니다 .

반면, 이진 검색 트리 ( BST )는 각 노드 가 비슷한 값을 가지며 왼쪽에있는 값이 큰 하위 값과 오른쪽에 연결된 값이 큰 하위 값 이있는 특수한 형식의 이진 트리 데이터 구조 입니다.

따라서 모든 BST이진 트리 이지만 일부 이진 트리BST 일 수도 있습니다 . BST이진 트리 의 하위 집합 임을 알립니다. .

따라서 이진 트리는 이진 검색 트리 보다 일반적인 데이터 구조 입니다. 또한 당신이 있음을 통지해야 이진 검색 트리 A는 정렬 된 일반 규칙의 이러한 설정이없는 반면, 트리 이진 트리 .

이진 트리

Binary Tree이다 하지BST ;

         5
       /   \
      /     \
     9       2
    / \     / \
  15   17  19  21

이진 검색 트리 (정렬 트리)

이진 검색 트리 도입니다 이진 트리 ;

         50
       /    \
      /      \
     25      75
    /  \    /  \
  20    30 70   80

이진 검색 트리 노드 속성

또한 BST의 모든 상위 노드 에 대해 통지 하십시오 .

  • 왼쪽의 모든 노드는 상위 노드의 값보다 작은 값을 갖습니다. 위의 예에서, 모든 왼쪽 ( 왼쪽 자손 )에 있는 값이 {20, 25, 30} 인 노드 는 50보다 작습니다.

  • 올바른 모든 노드는 상위 노드의 값보다 큰 값을 갖습니다. 위의 예 에서, 오른쪽 ( 오른쪽 자손 )이 모두 50 인 {70, 75, 80} 값을 가진 노드 는 50보다 큽니다.

이진 트리 노드 에는 이러한 규칙이 없습니다 . 이진 트리 노드에 대한 유일한 규칙 은 두 명의 자녀를 두는 것이므로 이진 이라는 이유를 스스로 설명합니다 .


Simple Binary Tree를 구현할 수 있습니까? 사용 가능한 구현이 있습니까? 이 나무의 용도는 무엇입니까?
Asif Mushtaq

@UnKnown 바이너리 검색 트리는 정렬 및 검색을 위해 사용할 수 있습니다. 바이너리 검색 트리의 구현은 여기에서 찾을 수 있습니다 : github.com/bzdgn/data-structures-in-java/blob/master/src/…
Levent Divilioglu

나는 그것에 대해 알고 있지만 Simple Tree 또는 Simple Binary Tree가 있습니까? 또는 간단한 이진 트리의 구현?
Asif Mushtaq

그것을 사용할 필요는 없지만 임의의 노드 인스턴스를 루트와 자식에 추가 할 수 있습니다.
Levent Divilioglu

10

이진 검색 트리는 다음과 같은 속성을 나타내는 특수 종류의 이진 트리입니다. 모든 노드 n에 대해 n의 왼쪽 하위 트리에있는 모든 하위 노드 값은 n의 값보다 작고 오른쪽 하위 트리에있는 모든 하위 노드 값은 다음과 같습니다. n 값보다 큽니다.


8

이진 트리

이진 트리는 자식 2 개와 부모 1 개가 있는 모든 것이 될 수 있습니다 . 연결 목록 또는 배열로 또는 사용자 정의 API로 구현할 수 있습니다. 특정 규칙을 더 추가하기 시작하면 더 전문화 된 트리가됩니다. 됩니다. 가장 일반적인 알려진 구현은 왼쪽에 작은 노드를 추가하고 오른쪽에 큰 노드를 추가하는 것입니다.

예를 들어, 값이 루트 노드와 크기 9, 높이 3의 표시 이진 트리, 2. 트리입니다 불균형이 아니라 분류 . https://en.wikipedia.org/wiki/Binary_tree

여기에 이미지 설명을 입력하십시오

예를 들어 왼쪽의 트리에서 A에는 6 명의 자식 {B, C, D, E, F, G}가 있습니다. 오른쪽의 이진 트리로 변환 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

이진 검색

이진 검색은 노드 체인에서 특정 항목을 찾는 데 사용되는 기술 / 알고리즘입니다. 이진 검색은 정렬 된 배열에서 작동합니다 .

이진 검색은 대상 값을 배열 의 중간 요소 와 비교합니다 . 동일하지 않으면 대상이 놓을 수없는 절반이 제거되고 성공하거나 나머지 절반이 비어있을 때까지 나머지 절반에서 검색이 계속됩니다. https://ko.wikipedia.org/wiki/Binary_search_algorithm

여기에 이미지 설명을 입력하십시오

이진 검색을 나타내는 트리 입니다. 여기서 검색되는 배열은 [20, 30, 40, 50, 90, 100]이고 대상 값은 40입니다.

여기에 이미지 설명을 입력하십시오

이진 검색 트리

이것은 이진 트리의 구현 중 하나입니다. 이를 위해 전문 검색 .

이진 검색 트리 및 B- 트리 데이터 구조는 이진 검색을 기반으로 합니다.

정렬 또는 정렬 이진 트리라고도하는 이진 검색 트리 (BST) 는 메모리에 "항목"(예 : 숫자, 이름 등)을 저장하는 데이터 구조 인 특정 유형의 컨테이너 입니다. https://ko.wikipedia.org/wiki/Binary_search_tree

크기가 9이고 깊이가 3 인 이진 검색 트리는 루트에 8입니다. 나뭇잎이 그려지지 않습니다.

여기에 이미지 설명을 입력하십시오

마지막으로 잘 알려진 데이터 구조와 알고리즘의 성능 비교를위한 훌륭한 스키마 :

여기에 이미지 설명을 입력하십시오

알고리즘 (4 판) 에서 가져온 이미지


4

이진 트리는 자식이 두 개를 넘지 않는 트리입니다. 이진 검색 트리는 왼쪽 자식이 루트 노드의 키보다 작은 값을 가져야하는 반면, 오른쪽 자식은 루트 노드의 키보다 큰 값을 가져야합니다.


4
  • 이진 검색 트리 : 이진 트리에서 순차 순회가 수행되면 삽입 된 항목의 정렬 된 값을 얻습니다.
  • 이진 트리 : 모든 종류의 순회에서 정렬 된 순서가 없습니다.

정렬 된 순서를 찾을 필요가 없습니다. 이진 검색 트리는 이진 트리이기도합니다. 상호 배타적이지 않습니다. BST는 BT의 적절한 하위 집합입니다.
Lorne의 후작

3

특정 이진 트리가 이진 검색 트리인지 확인하려면 이진 검색 트리가 있습니다.

트래버스 트리 순차 방식으로 (즉, 왼쪽 자식-> 부모-> 오른쪽 자식), 임시 변수에 순회 노드 데이터를 저장하면 temp에 저장하기 직전에 temp 라고 말할 수 있습니다. 현재 노드의 데이터가 이전 노드보다 높은지 확인하십시오 . 그런 다음 그것을 분해 하십시오. Tree는 이진 검색이 아닙니다. Tree는 끝날 때까지 횡단합니다.

아래는 Java를 사용한 예입니다.

public static boolean isBinarySearchTree(Tree root)
{
    if(root==null)
        return false;

    isBinarySearchTree(root.left);
    if(tree.data<temp)
        return false;
    else
        temp=tree.data;
    isBinarySearchTree(root.right);
    return true;
}

외부 온도 변수 유지


하위 트리 중 하나가 null 일 수 있습니다. 알고리즘이 해당 사례를 올바르게 처리하지 못합니다.
Lorne의 후작

1

이진 검색 트리에서 모든 노드는 특정 순서로 정렬됩니다. 루트 노드의 왼쪽에있는 노드는 루트보다 값이 작고 노드의 오른쪽에있는 모든 노드는 뿌리.


0

노드 중 하나의 최대 자식 수가 2 인 경우에만 트리를 이진 트리라고 할 수 있습니다.

노드 중 하나의 최대 자식 수가 2이고 왼쪽 자식이 항상 오른쪽 자식보다 작은 경우에만 트리를 이진 검색 트리로 호출 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.