<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Tree on Sobamemil</title>
    <link>https://blog.sobamemil.com/tags/tree/</link>
    <description>Recent content in Tree on Sobamemil</description>
    <generator>Hugo</generator>
    <language>ko</language>
    <lastBuildDate>Thu, 19 Mar 2020 15:06:28 +0900</lastBuildDate>
    <atom:link href="https://blog.sobamemil.com/tags/tree/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>이원 탐색 트리(Binary Search Tree) 배열 만들기</title>
      <link>https://blog.sobamemil.com/posts/131-%EC%9D%B4%EC%9B%90-%ED%83%90%EC%83%89-%ED%8A%B8%EB%A6%ACbinary-search-tree-%EB%B0%B0%EC%97%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0/</link>
      <pubDate>Thu, 19 Mar 2020 15:06:28 +0900</pubDate>
      <guid>https://blog.sobamemil.com/posts/131-%EC%9D%B4%EC%9B%90-%ED%83%90%EC%83%89-%ED%8A%B8%EB%A6%ACbinary-search-tree-%EB%B0%B0%EC%97%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0/</guid>
      <description>&lt;p&gt;&lt;strong&gt;문제 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;배열을 이용하여 이원 탐색 트리를 만들고 탐색하는 프로그램을 작성하라.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;입력 : 정렬이 되지 않은 숫자들&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;프로그램 :&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;  2.1 입력된 숫자들을 하나씩 읽으면서 이원 탐색 트리 배열 만들기&lt;/p&gt;
&lt;p&gt;  2.2 숫자 하나를 입력하면 이원탐색트리 알고리즘을 적용하여 해당하는 배열의 첨자를 출력하기&lt;/p&gt;
&lt;p&gt;         (이 때 출력은 배열 원소들을 차례대로 출력하고 해당하는 배열 첨자를 출력)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;실행 결과 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/131/img_1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;코드 :&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78&lt;/td&gt;
          &lt;td&gt;#include&lt;iostream&gt;  using namespace std;    void newBinarySearchTree(int *num_arr, int size, int *new_num_arr) {    for(int i=0; i&amp;lt;size+20; i++){ // 이원탐색트리 배열 -1로 초기화  new_num_arr[i] = -1;  }  new_num_arr[0] = num_arr[0];    for(int i=1; i&amp;lt;size; i++){  int index=0;  // 새로 들어올 숫자가 이원탐색트리 배열의 루트보다 작으면 왼쪽으로 이동  if(new_num_arr[0] &amp;gt; num_arr[i]) {  for(int j=2*index+1;;) {  if(new_num_arr[j] != -1){ //삽입하려는 이원탐색트리 배열공간이 NULL이 아니면 비교  if(new_num_arr[j] &amp;lt; num_arr[i]) j=2*j+2; //  삽입하고자 하는 숫자가 더 크면 2j+2  else if(new_num_arr[j] &amp;gt; num_arr[i]) j=2*j+1; // 삽입하고자 하는 숫자가 더 작으면 2j+1  z  else {  //같은 숫자가 나오면 오류메시지 출력 후 프로그램 비정상 종료  cout &amp;laquo; &amp;ldquo;same data error&amp;hellip;\n&amp;rdquo;; exit(1);  }  }  else if(new_num_arr[j] == -1) { // 삽입하려는 이원탐색트리 배열 공간이 NULL이면 바로 삽입  new_num_arr[j] = num_arr[i];  break;  }  }  }  // 새로 들어올 숫자가 이원탐색트리 배열의 루트보다 크면 오른쪽으로 이동  else if(new_num_arr[0] &amp;lt; num_arr[i]) {  for(int j=2*index+2;;) {  if(new_num_arr[j] != -1){ // 삽입하려는 이원탐색트리 배열공간이 NULL이 아니면 비교  if(new_num_arr[j] &amp;lt; num_arr[i]) j=2*j+2;  else if(new_num_arr[j] &amp;gt; num_arr[i]) j=2*j+1;  else {  cout &amp;laquo; &amp;ldquo;same data error&amp;hellip;\n&amp;rdquo;; exit(1);  }  }  else if(new_num_arr[j] == -1) {  new_num_arr[j] = num_arr[i];  break;  }  }  }  else continue;  }  }    void find(int *new_num_arr, int size) {  int x, flag;  cout &amp;laquo; &amp;ldquo;찾고자 하는 숫자 입력 : &amp;ldquo;;  cin &amp;raquo;  x;    for(int i=0; i&amp;lt;size; i++) // 이원탐색트리 배열의 모든 원소 출력  cout &amp;laquo; &amp;ldquo;arr[&amp;rdquo; &amp;laquo; i &amp;laquo; &amp;ldquo;] : &amp;quot; &amp;laquo; new_num_arr[i] &amp;laquo; endl;    for(int i=0; i&amp;lt;size; i++){  if(new_num_arr[i] == x) {  cout &amp;laquo; &amp;ldquo;index : &amp;quot; &amp;laquo; i;  flag = true;  break;  }  else  flag = false;  }  if(!flag) // flag가 false이면 찾고자 하는 숫자가 없다고 출력  cout &amp;laquo; &amp;ldquo;찾고자 하는 숫자 없음\n&amp;rdquo;;  }    int main() {  int num_arr[] = {50, 40, 55, 30, 45, 54, 53, 1, 60, 301, 2};  int num_arr_size = sizeof(num_arr)/sizeof(num_arr[0]);  int *new_num_arr = new int [num_arr_size + 20]; // 이원탐색트리 배열 공간 생성    newBinarySearchTree(num_arr, num_arr_size, new_num_arr);  find(new_num_arr, num_arr_size + 20);  }&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;설명 :&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
