참조 사이트 http://marobiana.tistory.com/81  잘나옴 

이진트리 개념 

1.자식 노드가 최대 두개의 노드를 지니고있급니다.

2. 자식노드가 존재 안 할수도 있습니다.

3.왼쪽 자식 노드 또는 오른쪽 자식 노드만 있을 수 도 있습니다.

4. 왼쪽 오른쪽 자식노드가 전부 존재 할 수 도 있습니다.

5.핵심 개념 - 왼쪽 자식노드는 부모 노드보다 작고  오른쪽 자식 노드는 부모노드 보다 커져야 한다 .


위트리는 맨 밑 노드(리프노드)를 제외한 모든 각 노드가 자식노드를 2개씩 

갖고있는데 이런트리를 완전트리라고 한다.

 

완전 트리가 아니더라도 자식노드가 2개 이하면 이진트리이다 아래와 같은 트리도 

이진 트리이다 .




문제 : 트리에 넣을 숫자들을 입력 받아 이진탐색트리를 만들어라.


위에서 이진탐색트리에 대한 정의를 설명한 것과 같이, 

숫자를 입력받고, 왼쪽엔 작은수, 오른쪽엔 큰 수를 넣는 것으로 흘러갈 것이다.


그런데 가만보면 왼쪽엔 작은수, 오른쪽엔 큰 수를 넣는 것   <= 요것이 반복되고 있다.

반복되는 것은? 재귀를 사용할 수 있다는 뜻이다.


흐름을 정리해보면 다음과 같다.


1) Root에 값이 없으면 Root에 값을 넣는다.

2) Root에 값이 있으면, 

   입력된 값이 Root보다 크면 오른쪽에 넣고, 작으면 왼쪽에 넣는다.

3) 오른쪽 혹은 왼쪽에 값이 이미 들어있으면,

    입력된 값과 비교해서 크면 오른쪽에 넣고, 작으면 왼쪽에 넣는다.

4) 오른쪽 혹은 왼쪽에 값이 이미 들어있으면,

    입력된 값과 비교해서 크면 오른쪽에 넣고, 작으면 왼쪽에 넣는다.

..... 



확실히 반복되는 흐름을 볼 수 있다.

우리는 반복되지 않는 1,2번을 코드로 만든 후 3번 이후를 재귀 호출 시키면 된다.


'Algorithm' 카테고리의 다른 글

이진 탐색 순회 개념  (0) 2015.05.03
이진 탐색트리 삽입  (0) 2015.05.03
quick sort 나누는 부분 성공  (0) 2015.04.23
Binarysearch  (0) 2015.04.22
merge sort의 합병 부분  (0) 2015.04.21
Posted by 이상욱1
,